
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

  
 
 

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
                  Операционная система  МОС ВП
 
                 Подсистема разработки программ
 
              ПРОГРАММА КОРРЕКТИРОВКИ ОБРАЗА ЗАДАЧИ
 
                    Руководство программиста
 
                       00152-01 33 05
 
                         Листов 209
  
  
  
    
   
   
  
  
  
  
  
  
  
  
  
  
  
                              1987 
 
 
 
                             - 2 -
 
                         00152-01 33 05
 
 
 
 
 
 
                            АННОТАЦИЯ
 
 
 
 
 
        Данный документ предназначен для использования опытны-
 
   ми системными программистами, которые записывают или  моди-
 
   фицируют выполняемые и разделяемые образы, а  также  образы
 
   драйвера устройства.
 
 
        В документе описывается программа корректировки образа
 
   задач ( программа PATCH ), входящая в  систему  МОС  ВП  см
 
   1700, и содержится общая информацая об использовании  прог-
 
   раммы PATCH, правила синтаксиса для корректного  применения
 
   PATCH и справочные сведения относительно команд PATCH.  Это
 
   руководство дает вводную информацию о программе PATCH  и  о
 
   специфических концепциях и терминологии PATCH.
 
 
 
 


 
 
                             - 3 -
 
                         00152-01 33 05
 
 
 
 
 
 
                           СОДЕРЖАНИЕ
 
 
 
 
 
   1.  НАЗНАЧЕНИЕ И УСЛОВИЯ ПРИМЕНЕНИЯ ПРОГРАММЫ             9
 
 
   1.1.    Назначение программы PATCH                       10
 
   1.2.    PATCH и  символьный  отладчик  программ
 
           операционной системы СМ 1700                     11
 
 
   2.  ХАРАКТЕРИСТИКИ ПРОГРАММЫ                             12
 
 
   2.1.    Входные и выходные файлы                         12
 
   2.2.    Использование программы PATCH                    13
 
   2.2.1.    Внесение исправлений                           13
 
   2.2.2.    Использование символов                         15
 
   2.2.2.1.  Таблица символов PATCH                         15
 
   2.2.2.2.  Определение области действия                   16
 
   2.2.2.3.  Символы и условные имена                       16
 
   2.2.2.4.  Переходные символы                             17
 
   2.2.3.    Использование области исправления              18
 
   2.2.4.    Использование    режимов    ввода     и
 
             воспроизведения                                19
 
   2.3.    Пример работы PATCH                              20
 
   2.4.    Команды в программе PATCH                        26
 
   2.4.1.    Формат цепочки команд                          26
 
   2.4.2.    Функциональное     обобщение     команд
 
             программы PATCH                                27
 
 
   3.  ОБРАЩЕНИЕ К ПРОГРАММЕ                                34
 
 
 
 
                             - 4 -
 
                         00152-01 33 05
 
 
   4.  ВХОДНЫЕ И ВЫХОДНЫЕ ДАННЫЕ                            35
 
 
   4.1.    Входной файл образов                             35
 
   4.1.1.    Разделяемые образы                             36
 
   4.1.2.    Образы драйвера устройства                     36
 
   4.1.3.    Выполняемые образы                             37
 
   4.2.    Выходной файл образов                            37
 
   4.3.    Журнальный файл                                  38
 
   4.4.    Командные процедуры                              40
 
   4.4.1.    Использование   команды   CREATE    для
 
             создания командных процедур                    41
 
   4.4.2.    Использование текстового редактора  для
 
             создания командных процедур                    42
 
 
   5.  РАБОЧИЕ ПРОЦЕДУРЫ                                    44
 
 
   5.1.    Способы запуска программы PATCH                  44
 
   5.1.1.    Запуск   PATCH    для    интерактивного
 
             исполнения.                                    45
 
   5.1.2.    Замена    командной    процедуры    для
 
             интерактивного выполнения                      46
 
   5.1.3.    Замена командной процедуры для пакетной
 
             работы                                         47
 
   5.2.    Квалификаторы команды PATCH                      48
 
   5.2.1.    Квалификаторы  для   замены   ошибочных
 
             спецификаций файлов                            50
 
   5.2.2.    Квалификатор /ABSOLUTE                         53
 
   5.2.3.    Квалификатор /NEW_VERSION                      55
 
   5.2.4.    Квалификатор  команды   для   обработки
 
             избранных исправлений                          56
 
   5.2.4.1.  Обработка   избранных   исправлений   в
 
 
 
                             - 5 -
 
                         00152-01 33 05
 
 
             командных процедурах                           57
 
   5.2.4.2.  Интерактивниая   обработка    избранных
 
             исправлений                                    59
 
   5.2.5.    Квалификатор /VOLUME                           60
        
   5.3.    Выход из программы PATCH                         61
 
 
   6.  СИМВОЛЫ                                              62
 
 
   6.1.    Символы,   распознаваемые    программой
 
           PATCH                                            62
 
   6.1.1.    Глобальные символы                             63
 
   6.1.2.    Локальные символы                              64
 
   6.1.3.    Имена модулей, имена секций программ  и
 
             имена программ                                 64
 
   6.1.4.    Универсальные символы                          65
 
   6.1.5.    Символьные метки инструкций                    68
 
   6.1.6.    Символы, определяемые командой DEFINE          73
 
   6.2.    Таблица символов PATCH                           73
 
   6.3.    Условные имена                                   74
 
   6.4.    Перевод символов и значений                      76
 
   6.4.1.    Перевод символов в адресные значения           76
 
   6.4.2.    Перевод адресных значений в символы            77
 
 
   7.  ОБЛАСТЬ ИСПРАВЛЕНИЙ PATCH                            79
 
 
   7.1.    Область для исправления ошибок                   79
 
   7.2.    Область исправлений PATCH, определяемая
 
           пользователем                                    80
 
   7.2.1.    Когда использовать область исправлений,
 
             определяемую пользователем                     81
 
   7.2.2.    Создание      области      исправлений,
 
             определяемой пользователем                     82
 
 
                             - 6 -
 
                         00152-01 33 05
 
 
   7.2.3.    Доступ    к    области     исправлений,
 
             определяемой пользователем                     83
 
   7.2.4.    Прекращение    использования    области
 
             исправлений, определяемой пользователем        83
 
   7.3.    Дескриптор области исправлений                   83
 
   7.4.    Символы области исправлений                      84
 
   7.5.    Команды,  которые  влияют  на   область
 
           исправлений                                      84
 
   7.5.1.    Команда INSERT/INSTRUCTION                     85
 
   7.5.2.    Команда REPLACE/INSTRUCTION                    86
 
   7.5.3.    Команда DEPOSIT/PATCH_AREA                     87
 
   7.5.4.    Команда ALIGN                                  87
 
 
   8.  РЕЖИМЫ ВВОДА И ВОСПРОИЗВЕДЕНИЯ                       88
 
 
   8.1.    Режимы и квалификаторы режимов                   91
 
   8.2.    Установление    режимов     ввода     и
 
           воспроизведения                                  92
 
   8.2.1.    Режимы группы контекст                         92
 
   8.2.1.1.  Режимы INSTRUCTION/NOINSTRUCTION               92
 
   8.2.1.2.  Режимы ASCII/NOASCII                           93
 
   8.2.1.3.  Режимы SYMBOLS/NOSYMBOLS                       95
 
   8.2.2.    Режимы длины                                   95
 
   8.2.3.    Режимы основания                               96
 
   8.2.4.    Режимы проверки символов                       97
 
   8.2.4.1.  Режимы SCOPE/NOSCOPE                           97
 
   8.2.4.2.  Режимы GLOBALS/NOGLOBALS                       98
 
 
   9.  ПРАВИЛА СИНТАКСИСА                                   98
 
 
   9.1.    Запросы команд                                   98
 
   9.2.    Перенос команд                                  100
 
 
                             - 7 -
 
                         00152-01 33 05
 
 
   9.3.    Введение цепочек  данных  в  символьном
 
           коде                                            100
 
   9.4.    Введение инструкций на языке  масро  CM
 
           1700                                            101
 
   9.5.    Введение числовых данных                        102
 
   9.6.    Ограничение ввода параметров                    103
 
   9.7.    Введение комментариев                           103
 
   9.8.    Усечение ключевых слов                          104
 
   9.9.    Специальные        операторы        для
 
           арифметических выражений                        106
 
   9.9.1.    Оператор сложения (+)                         107
 
   9.9.2.    Оператор вычитания (-)                        108
 
   9.9.3.    Оператор умножения (*)                        109
 
   9.9.4.    Оператор деления (/)                          109
   
   9.9.5.    Оператор арифметического сдвига (@)           110
 
   9.9.6.    Оператор приоритета (<>)                      110
 
   9.9.7.    Оператор основания ( ^ )                      111
 
   9.10.   Специальные  операторы  для   адресации
 
           ячеек                                           112
 
   9.10.1.   Оператор текущей ячейки (.)                   113
 
   9.10.2.   Оператор предыдущей ячейки (^)                114
 
   9.10.3.   Оператор дальности (:)                        115
 
   9.10.4.   Оператор обратной дроби (бекслеш) (\)         115
 
   9.11.   Инструкции на языке  масро  CM  1700  с
 
           одинаковыми кодами операций                     116
 
 
   10. КОМАНДЫ ПРОГРАММЫ PATCH                             119
 
 
   10.1.   Команда ALIGN                                   119
 
   10.2.   Команда CANCEL MODE                             122
 
   10.3.   Команда CANCEL MODULE                           123
 
 
                             - 8 -
 
                         00152-01 33 05
 
 
   10.4.   Команда CANCEL PATCH_AREA                       125
 
   10.5.   Команда CANCEL SCOPE                            126
 
   10.6.   Команда CHECK ECO                               127
 
   10.7.   Команда CHECK NOT ECO                           129
 
   10.8.   Команда CREATE                                  130
 
   10.9.   Команда DEFINE                                  133
 
   10.10.  Команда DELETE                                  136
 
   10.11.  Команда DEPOSIT                                 140
 
   10.12.  Команда EVALUATE                                147
 
   10.13.  Команда EXAMINE                                 153
 
   10.14.  Команда EXIT                                    158
 
   10.15.  Kоманда INSERT                                  160
 
   10.16.  Команда REPLACE                                 165
 
   10.17.  Команда SET ECO                                 172
 
   10.18.  Команда SET MODE                                174
 
   10.19.  Команда SET MODULE                              175
 
   10.20.  Команда SET PATCH_AREA                          177
 
   10.21.  Команда SET SCOPE                               178
 
   10.22.  Команда SHOW MODE                               179
 
   10.23.  Команда SHOW MODULE                             180
 
   10.24.  Команда SHOW PATCH_AREA                         181
 
   10.25.  Команда SHOW SCOPE                              182
 
   10.26.  Команда UPDATE                                  183
 
   10.27.  Команда VERIFY                                  184
 
 
   11. СООБЩЕНИЯ ОБОШИБКАХ                                 188
 
 
   ПРИЛОЖЕНИЕ. Обобщение  команд                           206
 
 
 
 
 
 
 
 
                             - 9 -
 
                         00152-01 33 05
 
 
          1. НАЗНАЧЕНИЕ И УСЛОВИЯ ПРИМЕНЕНИЯ ПРОГРАММЫ
 
 
 
 
        После  компилирования,  ассемблирования  и  компоновки
 
   программы может оказаться необходимым  внесение  нескольких
 
   изменений в код. Существует два пути изменения  кода.  Один
 
   путь включает редактирование исходной программы  перекомпи-
 
   ляцию или переассемблирование, новую  компоновку  и  прогон
 
   нового варианта. Однако часто  не  имеется  исходный  текст
 
   программы для редактрования или время, требуемое для внесе-
 
   ния изменений и создания выполняемого  образа,  оказывается
 
   слишком велико.в этих случаях вторым путем является исполь-
 
   зование программы PATCH.
 
 
        PATCH обеспечивает широкий набор  команд,  позволяющий
 
   вносить изменения непосредственно в файл образов,  а  затем
 
   прогонять новый вариант без перекомпилирования или  переас-
 
   семблирования и новой компоновки. Кроме того, PATCH создает
 
   журнальный файл, в котором записываются все команды  PATCH,
 
   используемые в процессе работы. Этот  файл  и  обеспечивает
 
   простой путь слежения за изменениями и попытками изменений,
 
   которые делались в процессе обработки файла образов.
 
 
        PATCH может использоваться  для  редактирования  файла
 
   образов в процессе интерактивного взаимодействия с термина-
 
   лом. Можно также вводить команды PATCH из командной  проце-
 
   дуры, а затем заменять командную процедуру на  обработку  в
 
   интерактивном или пакетном режиме.
 
 
        PATCH также обладает несколькими особенностями,  помо-
 
   гающими находить и корректировать ошибочный код.  Эти  осо-
 
   бенности включают:
 
 
                            - 10 -
 
                         00152-01 33 05
 
 
          - символьное обозначение ячеек;
 
 
          - область PATCH для накопления дополнительных данных
 
            и инструкций;
 
 
          - режимы ввода и воспроизведения для контроля  окру-
 
            жающих условий, в которых PATCH принимает  команды
 
            и воспроизводит свои выходные данные.
 
 
 
        П_р_и_м_е_ч_а_н_и_е. В данном  документе  используются
 
   следующие термины и условные обозначения:
 
 
   УС/Х (CTRL/X)       выражение ''УС/Х'' (CTRL/X) означает,
 
                       что вводится контрольный знак путем
 
                       нажатия соответствующей клавиши при
 
                       нажатой клавише УС (CTRL).
 
   Новая инструкция    вертикальное многоточие указывает,что
 
          .            Показаны не все данные,которые систе-
 
          .            Ма могла бы нормально воспроизвести,
 
          .            Или пользователь мог бы нормально
 
                       ввести.
 
   Уровень...          Горизонтальное многоточие указывает,
 
                       что могут быть введены дополнительные
 
                       параметры,значения или информация.
 
   [символьное имя]    квадратные скобки указывают,что за-
 
                       ключенное в них выражение может быть
 
                       выбрано произвольно.
 
 
 
        1.1. Назначение программы PATCH
 
 
 
        Программа PATCH предназначена для использования в про-
 
 
 
                            - 11 -
 
                         00152-01 33 05
 
 
   цессе обслуживания и поддержания в рабочем состоянии испол-
 
   нительских файлов образов,  разделяемых  файлов  образов  и
 
   файлов образов драйвера устройства, записанных  пользовате-
 
   лями на любом языке, имеющемся в операционной  системе  мос
 
   вп. Любые изменения, внесенные в это программное  обеспече-
 
   ние, могут привести к затруднениям в дальнейшем использова-
 
   нии и совершенствовании программного обеспечения.
 
 
 
        1.2. PATCH и  символьный  отладчик  программ
 
             операционной системы СМ 1700
 
 
 
        Во многих случаях PATCH может использоваться совместно
 
   с символьным отладчиком  пограмм  операционной  системы  СМ
 
   1700. Отладчик позволяет шаг за шагом  проходить  по  файлу
 
   образов и вносить  временные  изменения  .  После  принятия
 
   решения о новом коде, PATCH делает изменения постоянными  в
 
   новой версии файла образов. В исходный  файл  изменения  не
 
   вносятся.
 
 
 
 
 
 
                            - 12 -
 
                         00152-01 33 05
 
 
                  2. ХАРАКТЕРИСТИКИ ПРОГРАММЫ
 
 
 
 
 
        2.1. Входные и выходные файлы
 
 
 
        Программа PATCH применятся для  внесения  изменений  в
 
   файл образов в процессе интерактивной работы  с  терминалом
 
   или путем замены командной процедуры на  интерактивный  или
 
   пакетный режим обработки.
 
 
        В  процессе  интерактивного  внесения  изменений  ввод
 
   содержит входной файл образов, являющийся тем файлом, кото-
 
   рый подлежит обновлению,  и  команды  PATCH,  которые,  при
 
   исполнении, осуществляют изменения.
 
 
        В процессе внесения  изменений  посредством  командной
 
   процедуры единственным вводом является  название  командной
 
   процедуры PATCH. Командная  процедура  содержит  имя  файла
 
   образов, подлежащего  редактированию  и  команды  программы
 
   PATCH.
 
 
        При внесении изменений в  файл  образов,  PATCH  может
 
   создавать следующие три выходных файла:
 
 
        1) выходной файл образов - обновленный  файл  образов.
 
   Этот файл должен быть создан исключительно с использованием
 
   команды UPDATE;
 
 
        2) журнальный файл - файл в символьном коде,  содержа-
 
   щий запись работы PATCH.этот файл  автоматически  создается
 
   программой PATCH;
 
 
 
 
 
                            - 13 -
 
                         00152-01 33 05
 
 
        3) командная  процедура  -  файл,  содержащий  команды
 
   PATCH, которые могут последовательно выполняться. Этот файл
 
   должен быть создан исключительно с  использованием  команды
 
   CREATE.
 
 
 
        2.2. Использование программы PATCH
 
 
 
        Данный подраздел содержит общую информацию,  необходи-
 
   мую для эффективного использования  PATCH.  Эта  информация
 
   включает рекомендации как проводить работу PATCH и как вно-
 
   сить изменения в файл образов, а также сведения об  исполь-
 
   зовании символов, об области изменений, о режимах  ввода  и
 
   воспроизведения.
 
 
 
        2.2.1. Внесение исправлений
 
 
 
        В процессе внесения исправлений в файл образов,  неза-
 
   висимо от того, вносятся исправления интерактивно или через
 
   командную процедуру, должны использоваться  следующие  типы
 
   команд PATCH:
 
 
          - инициатор исправления: команда  SET  ECO,  которая
 
            определяет   уникальный   уровень   ''технического
 
            порядка изменения''(ЕCO) между 1  и  128,  включи-
 
            тельно, для каждого исправления. Уровень ECO  слу-
 
            жит в качестве идентификатора  для  исправления  (
 
            разд.10);
 
 
          - команды PATCH, которые  проверяют  и  модифицируют
 
            файл образов (см. разд.10);
 
 
 
 
                            - 14 -
 
                         00152-01 33 05
 
 
          - терминатор исправления:  команда  UPDATE,  которая
 
            устанавливает уровень ECO и вносит  исправление  в
 
            файл образов (см. разд.10).
 
 
        Эти команды должны подаваться в указанном порядке. Они
 
   могут повторяться много раз по мере необходимости в течение
 
   одного цикла работы PATCH.
 
 
        Пример.
 
   PATCH> SET ECO 1
 
   PATCH> EXAMINE/INSTRUCTION 606
 
   00000606:  TSTL R4
 
   PATCH> REPLACE/INSTRUCTION 606='TSTL R4'
 
   NEW> 'TSTL R5'
 
   NEW> EXIT
 
   OLD:   00000606:   TSTL R4
 
   NEW:   00000606:   TSTL R5
 
   PATCH> UPDATE
 
   %PATCH-I-WRTFIL,UPDATING IMAGE FILE DM1:[GARTH]NEGATION.EXE
 
 
        Пример иллюстрирует  типовое  внесение  исправления  в
 
   файл образов с именем NEGATION.EXE;1:.
 
 
        В примере уровень ECO определен как 1. Команда EXAMINE
 
   требует, чтобы содержимое ячейки 606 было представлено  как
 
   инструкция на языке МАCRO СМ 1700.  Затем  команда  REPLACE
                       
   меняет  инструкцию  в  ячейке  606  на  другую  инструкцию.
 
   команда UPDATE устанавливает уровень ECO 1 и вносит исправ-
 
   ление в файл NEGATION.EXE.
 
 
 
 
 
 
 
 
                            - 15 -
 
                         00152-01 33 05
 
 
        2.2.2. Использование символов
 
 
 
        Для изменения кода в файле образов необходимо  выявить
 
   ячейки, содержащие ошибочные инструкции или данные.  Т.  е.
 
   вы должны  идентифицировать  действительные  адреса  внутри
 
   файла образов.  Определение  местоположения  действительных
 
   адресов может быть произведено двумя путями:
 
 
        1) получить список и  карту  фаила  образов.  Перечень
 
   дает относительные начальные номера для  каждого  модуля  в
 
   файле образов, а карта показывает,  где  начинается  каждый
 
   модуль в действительной памяти;
 
 
        2) определить адреса посредством  символических  имен,
 
   определенных в файле образов, когда он создавался.
 
 
        Согласно второму способу с помощью PATCH можно опраши-
 
   вать ячейки, используя символические имена, присвоенные им,
 
   и PATCH будет распознавать символические  имена,  используя
 
   таблицу символов и ииндикатор.
 
 
 
        2.2.2.1. Таблица символов PATCH
 
 
 
        Программа PATCH содержит таблицу символов,  в  которой
 
   помещены все символы . Каждый символ, содержащийся  в  этой
 
   таблице, может быть использован для обозначения  одной  или
 
   нескольких ячеек. PATCH выдает сообщение  об  ошибке,  если
 
   имеет место попытка использовать символ, не содержащийся  в
 
   данной таблице.
 
 
        Для определения статуса символов  в  таблице  символов
 
   необходимо напечатать команду SHOW MODULE. Затем,  если  вы
 
 
                            - 16 -
 
                         00152-01 33 05
 
 
   хотите добавить или вычеркнуть специфическую  информацию  о
 
   символах, необходимо  напечатать  команду  SET  MODULE  или
 
   CANCEL MODULE (см. разд. 10).
 
 
 
        2.2.2.2. Определение области действия
 
 
 
        Когда символ имеет многозначное определение (  т.е.  ,
 
   когда он представляет две или  несколько  ячеек  памяти)  и
 
   символ находится в распоряжении PATCH, необходимо  указать,
 
   какая ячейка имеется в виду при использовании этого символа
 
   в команде. Это осуществляется путем  определения  ''области
 
   действия'' символа. Область действия -  это  имя  модуля  и
 
   дополнительные условия, при которых появляется символ.  Для
 
   установления правильной области действия необходимо напеча-
 
   тать команду SET SCOPE или перед символом указать имя моду-
 
   ля или условия, в  которых  он  содержится.  Дополнительная
 
   информация о команде SET SCOPE (см. разд.10).
 
 
 
        2.2.2.3. Символы и условные имена
 
 
 
        Программа  PATCH  позволяет  использовать  символы   и
 
   условные имена для нахождения и  определения  специфических
 
   ячеек памяти внутри файла образов. PATCH распознает следую-
 
   щие символы:
 
 
          - глобальные символы;
 
 
          - локальные символы;
 
 
          - имена модулей, имена секций программы, имена прог-
 
            раммных действий;
 
 
 
                            - 17 -
 
                         00152-01 33 05
 
 
          - универсальные символы;
 
 
          - символьные метки инструкций;
 
 
          - символы, определяемые командой DEFINE.
 
 
        Локальный  и  глобальный  символ  могут   представлять
 
   более, чем одну ячейку памяти в  файле  образов.  Например,
 
   локальный символ XYZ может  представлять  ячейку  памяти  в
 
   модуле а и другую ячейку памяти в модуле в. Для  разрешения
 
   неоднозначности символа XYZ , PATCH позволяет  использовать
 
   условные имена опорных ячеек.
 
 
        Условное имя является полным и  однозначным  переводом
 
   для ячейки памяти, т.е.  условное  имя  определяет  область
 
   действия, имя символа и значение начального номера  в  сле-
 
   дующем формате:
 
 
           SCOPE\SYMBOL-NAME+или-OFFSET-VALUE
 
 
        Если символ является уникальным, условное имя содержит
 
   имя символа и,  в  некоторых  случаях,  значене  начального
 
   номера; область действия в данном случае становится  ненуж-
 
   ной.
 
 
 
        2.2.2.4. Переходные символы
 
 
 
        Для надежного обеспечения доступности символов в  про-
 
   цессе работы необходимо включать  некоторую  информацию  на
 
   этапе ассемблирования или компиляции, а также при компонов-
 
   ке программы. Например,  для  ввода  локальных  символов  в
 
   программу на языке MACRO необходимо  включить  квалификатор
 
   /ENABLE=DEBUG при ассемблировании программы и  квалификатор
 
 
                            - 18 -
 
                         00152-01 33 05
 
 
   /DEBUG при компоновке программы.
 
 
        По вопросам включения  соответствующих  квалификаторов
 
   для ввода символов в программу PATCH необходимо  обращаться
 
   к руководствам по  пользованию  соответствующими  машинными
 
   языками.
 
 
 
        2.2.3. Использование области исправления
 
 
 
        Во многих случаях внесение исправлений в файл  образов
 
   требует добавления строк в файл. Изменения вносятся в нако-
 
   пительное пространство, называемое областью исправления.
 
 
        Существует два типа областей исправления: область исп-
 
   равления для ошибок  и  область  исправления,  определяемая
 
   пользователем. Когда  нет  достаточно  места  для  внесения
 
   нового кода в требуемую ячейку, PATCH автоматически  вводит
 
   дополнительный код в текущую область исправления (  либо  в
 
   предназначенную для исправления ошибок, либо в определяемую
 
   пользователем) . Затем PATCH вводит соединительные инструк-
 
   ции к области исправления и от нее для поддержания нормаль-
 
   ного хода выполнения программы.
 
 
        Имеется возможность затребовать, чтобы некоторые  дан-
 
   ные были помещены в текущей области исправлений.  Это  осу-
 
   ществляется по команде DEPOSIT/PATCH AREA . Однако  следует
 
   иметь ввиду, что PATCH не генерирует  дополнительных  инст-
 
   рукций к области исправлений,  когда  используется  команда
 
   DEPOSIT/PATCH AREA . В этом случае  необходимо  следить  за
 
   прохождением информации  и  корректировать  ход  выполнения
 
   программы.
 
 
 
                            - 19 -
 
                         00152-01 33 05
 
 
        2.2.4. Использование    режимов    ввода     и
 
               воспроизведения
 
 
       
        Чтобы сделать доступ к ячейкам в файле  образов  более
 
   удобным, PATCH обеспечивает четыре основных категории режи-
 
   мов адресации, также называемых режимами ввода и  воспроиз-
 
   ведения. Этими четырьмя категориями режимов являются:  кон-
 
   текст, основание, длина и проверка символов. В табл.1  при-
 
   водятся краткие функциональные определения каждой категории
 
   режимов.
 
 
        При включении PATCH режимы установлены следующим обра-
 
   зом: NOASCII, NOINSTRUCTION,  SYMBOLS,  HEXADECIMAL,  LONG,
 
   NOGLOBALS и SCOPE. Для изменения  этих  режимов  необходимо
 
   подать команды SET MODE и CANCEL MODE или ввести квалифика-
 
   тор альтернативного режима в цепочку команд.
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
                            - 20 -
 
                         00152-01 33 05
 
 
                                                     Таблица 1
 
    Функциональное разделение режимов ввода и воспроизведения
 
 
 
   -----------------------------------------------------------
            !               !
   Kатегория! Режим         !              Функция
            !               !
   -----------------------------------------------------------
            !               !
   Контекст ![NO]ASCII      ! Контролирует прием и воспроизве-
            !               !
            ![NO]INSTRUCTION! дение данных PATCH в виде текс-
            !               !
            ![NO]SYMBOLS    ! та в символьном коде или инструк
            !               !
            !               ! на языке масRO см 1700 и воспро-
            !               !
            !               ! изводит адреса в символическом
            !               !
            !               ! представлении
            !               !
   ОснованиE! OCTAL         ! Контролирует основание,на кото-
            !               !
            ! DECIMAL       ! ром PATCH принимает и воспроиз-
            !               !
            ! HEXADECIMAL   ! водит данные и адреса
            !               !
   Длина    !BYTE           ! Контролирует размеры, в которых
            !               !
            !WORD           ! PATCH принимает и воспроизводит
            !               !
            !LONG           ! данные
            !               !
   Проверка ![NO]GLOBALS    ! Контролирует  как  PATCH осуще-
            !               !
   символов ![NO]SCOPE      ! ствляет перевод символов и зна-
            !               !
            !               ! чений
 
 
 
        2.3. Пример работы PATCH
 
 
 
        Пример иллюстрирует интерактивную работу PATCH. В сле-
 
   дующей программе на языке маCRO CM 1700 представлено  деся-
 
   тичное целое число, которое затем воспроизводится как отри-
 
   цательное:
 
 
 
 
                            - 21 -
 
                         00152-01 33 05
 
  Пример.
 
      0000    1    .TITLE   CALCULATES NEG OF DECIMAL INTEGER
 
      0000    2    .IDENT /01/
 
      0000    3

      0000    4    .SUBTITLE-PURE DATA
 
   00000000   5    .PSECT RO-DATA,NOWRT,NOEXE,LONG
 
       0000   6
 
       0000   7 PROMT: .ASCII        /ENTER DECIMAL INTEGER/
 
       0016   8
 
       0016   9 PROMPT-LEN = .-PROMPT
 
       0016  10 RESULT-FAO:
 
       0016  11    .ASCID \THE NEGATIONIS ISL.\
 
       0024
 
       0030
 
       0032  12
 
       0032  13    .SUBTITLE-IMPURE DATA
 
   00000000  14    .PSECT RW-DATA,NOEXE,LONG
 
       0000  15
 
       0000  16 BUFFER-SIZE     =     132        ;BUFFER SIZE
 
       0000  17 BUFFER-DESC:
 
       0000  18 .LONG BUFFER-SIZE,BUFFER ;DESKRIPTOR FOR BUFFFER
 
       0008  19
 
       0008  20 BUFFER:
 
       0008  21  .BLKB   BUFFER-SIZE   ;BUFFER TO SET LINE
 
       008C  22
 
       008C  23 INTEGER:
 
       008C  24   .BLKL        1          ;INPUT INTEGER
 
       0090  25 RESULT:
 
       0090  26   .BLKL        1          ;RESULT OF OPERATION
 
 
                            - 22 -
 
                         00152-01 33 05
 
 
       0094  27
 
       0094  28   .SUBTITLE  DEFINE RAB AND FAB FOR TERMINAL
 
                                                       I/O
 
       0094  29
 
       0094  30 TRMFAB: $FAB  FNM=<SYS$INPUT>,RAT=CR ;FAB FOR
 
                                                   TERMINAL
 
       00E4  31 TRMRAB: $RAB  FAB=TRMFAB,UBF=BUFFER,USZ=
 
                                   BUFFER_SIZE,ROP=PMT-
 
       00E4  32                 PBF=PROMPT,PSZ=PROMPT_LEN
 
       00E4  33                         ;RAB FOR TERMINAL
 
       0128  34
 
       0128  35    .SUBTITLE        PROGRAM ENTRY POINT
 
   00000000  36    .PSECT RO-CODE,EXE,NOWRT
 
       0000  37    .ENTRY-POINT,0
 
       0002  38
 
       0002  39    $OPEN  FAB=TRMFAB  ;OPEN TERMINAL FILE
 
       000F  40    $CONNECT  FARB=TRMRAB;CONNECT RECORD STREAM
 
       001C  41    $GET   RAB=TRMRAB ;GET INPUT FROM TERMINAL
 
       0029  42
 
       0029  43    PUSHAL  INTEGER   ;PUSH INTEGER ADDRESS ON
 
                                                   STACK
 
       002F  44    PUSHL    RAB$L-RBF+TRMRAB ;PUSH STARTING
 
                                           ADDRESS OF
 
       0035  45                ;  INPUT ON STACK
 
       0035  46    MOVZWL    RAB$W_RSZ+TRMRAB,-(SP)  ;PUSH
 
       003C  47              ;LENGTH OF INPUT ON STACK
 
       003C  48    CALLS   $3,GOLIB$CVT_DTS ;CONVERT TO BINARY
 
       0043  49    MOVL    INTEGER,RESULT ;CALCULATE NEGATION
 
       004E  50
 
       004E  51 ;DETERMINE LENGTH AND CONTENTS  OF RESULT
 
 
                            - 23 -
 
                         00152-01 33 05
 
 
       004E  52
 
       004E  53        $FAO_S        CTRSTR=RESULT_FAO,-
 
       004E  54                OUTLEN-TRMRAB+RAB$W_RSZ,-
 
       004E  55                OUTBUF=BUFFER_DESC,-
 
       004E  56                P1=RESULT
 
       006D  57
 
       006D  58 ;OUTPUT RESULT
 
       006D  59
 
       006D   60        MOVAB        BUFFER,TRMRAB+RAB$L_RBF
 
       0078   61        $PUT        RAB=TRMRAB
 
       0085   62        MOVZBL        $SS$_NORMAL,RO
 
       0089   63         RET
 
       008A   64        .END        ENTRY_POINT
 
 
        программа будет ассемблироваться и компоноваться  сле-
 
   дующим образом:
 
 
           $ MACRO/ENABLE=DEBUG NEGATION.MAC;1
 
           $ LINK/DEBUG NEGATION.OBJ;1
 
           $ RUN/NODEBUG NEGATION.EXE;1
 
           ENTER DECIMAL INTEGER 25
 
           THE NEGATION IS 25
 
           $
 
 
        После обнаружения  местоположения  неправильного  кода
 
   путем использования символического  отладчика  программ  см
 
   1700 или просто путем проверки перечня можно включить PATCH
 
   для внесения постоянных изменений в файл образов как  пока-
 
   зано ниже. Цифры, поставленные с правой стороны  измененных
 
   строчек, связаны с пояснениями, приведенными за примером.
 
 
 
                            - 24 -
 
                         00152-01 33 05
 
 
   Пример.
 
   $ PATCH NEGATION.EXE;1    (1)
 
     PATCH VERSION 2.0 15 MAR 80
 
   PATCH> SET ECO 1 (2)
 
   PATCH> SET MODULE/ALL (3)
 
   PATCH> SET SCOPE NEGATION (4)
 
   PATCH> SET MODE INSTRUCTION (5)
 
   PATCH> EXAMINE RO_CODE+43
 
   NEGATION\RO_CODE+43 MOVL L^NEGATION\INTEGER,L^NEGATION
 
                                           \RESULT  (6)
 
   PATCH> REPLACE NEGATION\RO_KODE+43
 
   OLD> 'MOVL L^NEGATION\INTEGER L^NEGATION\RESULT'
 
   OLD> EXIT
 
   NEW> 'MNEGL L^NEGATION\INTEGER L^NEGATION\RESULT'
 
   NEW> EXIT
 
   OLD: NEGATION\RO_CODE+43: MOVL  L^NEGATION\INTEGER,L^
 
                                   NEGATION\RESULT
 
   NEW : NEGATION\RO_CODE+43: MNEGL L^NEGATION\INTEGER,L^
 
                                   NEGATION\RESULT
 
   PATCH> UPDATE
 
   %PATCH-I-WRITFIL, UPDATING IMAGE FILE DM1:
 
                           [GARTH]NEGATION.EXE;2  (7)
 
   PATCH> EXIT  (8)
 
   $
 
   где:
 
 
        (1) запуск PATCH
 
 
        включить PATCH на интерактивную  работу  с  терминалом
 
   путем введения цепочки команд DCL PATCH  NEGATION.EXE;1.  В
 
   ответ PATCH воспроизводит на терминале  вводное  сообщение.
 
 
                            - 25 -
 
                         00152-01 33 05
 
 
   это указывает используемую версию PATCH и его выходные дан-
 
   ные.
 
 
        (2) определить уровень ECO
 
 
        команда определяет уровень ECO для работы PATCH.  Сле-
 
   дует иметь ввиду, что уровень ECO не будет установлен  пока
 
   не будет подана команда SET ECO.
 
 
        (3) изменить статус символов
 
 
        команда SET MODULE/ALL вводит всю информацию о локаль-
 
   ных символах в таблицу символов, при  условии,  что  соблю-
 
   даются правила введения локальных символов во время  компи-
 
   лирования или ассемблирования и радактирования программы.
 
 
        (4) изменить статус области действия
 
 
        команда SET SCOPE меняет определение области действия.
 
   В данном случае область действия устанавливается в пределах
 
   модуля, именуемого NEGATATION.EXE.
 
 
        (5) изменить статус режимов ввода и воспроизведения
 
 
        команда SET MODE устанавливает  режим  вынуждая  PATCH
 
   воспроизводить содержимое указанных  ячеек  как  инструкции
 
   МАCRO CM 1700.
 
 
        (6) изменить код
 
 
        для модификации кода можно использовать цепочки команд
 
   PATCH. Каждая команда меняет  код  уникальным  способом.  В
 
   данном примере команда REPLACE использовалась для переписы-
 
   вания существующей инструкции в виде новой правильной инст-
 
   рукции.
 
 
                            - 26 -
 
                         00152-01 33 05
 
 
        (7) установить уровень ECO и обновить файл образов
 
 
        после корректирования кода подается команда  UPDATE  ,
 
   по которой устанавливается уровень ECO  и  создается  новый
 
   файл образов, содержащий оригинал файла образов и исправле-
 
   ние.
 
 
        (8) выход из работы PATCH
 
 
        ввести команду EXIT для  прекращения  работы  PATCH  и
 
   передать управление интерпретатору команд МОС ВП.
 
 
        Теперь можно пропустить программу NEGATION.EXE;2 и она
 
   будет выполняться должным образом.
 
 
           $ RUN NEGATION.EXE;2
 
           ENTER DECIMAL INTEGER 37
 
           THE NEGATION IS -37.
 
           $
 
 
 
        2.4. Команды в программе PATCH
 
 
 
 
        2.4.1. Формат цепочки команд
 
 
 
        Команды PATCH подаются для проверки,  подтверждения  и
 
   модификации содержого ячеек в файле образов. Команда  PATCH
 
   принимает следующий формат:
 
 
           команда [квалификатор] [параметр[ы]] [!комментарий]
 
   где:
 
 
        команда - определяет команду PATCH,
 
 
 
 
                            - 27 -
 
                         00152-01 33 05
 
 
        квалификатор[ы] - определяет один или несколько квали-
 
   фикаторов, которые модифицируют назначение команды.  Квали-
 
   фикатор может быть одним из следующих:
 
 
          - квалификатор стыкования;
 
 
          - квалификатор режима;
 
 
          - прочие квалификаторы.
 
 
        Квалификаторы режимов кратко описаны в разд.10. Полное
 
   описание квалификаторов режимов приведено в разд.8.
 
 
        Можно вводить многочисленные квалификаторы после одной
 
   команды при условии, что каждому квалификатору предшествует
 
   знак дроби.
 
 
        Параметр[ы] - определяет цель команды,  как  например,
 
   ряд ячеек памяти.
 
 
        Комментарий - определяет предел.
 
 
        PATCH игнорирует все данные, начинающиеся с  восклица-
 
   тельного знака.
 
 
        Полное описание правил  введения  команд  приведено  в
 
   разд.9.
 
 
 
        2.4.2. Функциональное     обобщение     команд
 
               программы PATCH
 
 
 
        В данном пункте обобщается  применение  команд  PATCH.
 
   команды функционально сгруппированы в пяти таблицах:
 
 
          - команды для создания исправлений (табл. 2 ) ;
 
 
                            - 28 -
 
                         00152-01 33 05
 
 
          - команды для манипулирования  областью  исправлений
 
            (таблица 3);
 
 
          - команды для проверки и модификации  ячеек  (табл. 
 
            4);
 
 
          - команды для управления режимами PATCH (табл. 5);
 
 
          - команды для выражения  символов  и  условных  имен
 
            (табл. 6 ).
 
 
        В этих таблицах каждая команда описана кратко.
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
                            - 29 -
 
                         00152-01 33 05
 
 
                                                     Таблица 2
 
                Команды для создания исправлений
 
 
   ---------------------------------------------------------
                !
   Команда      !                   Описание
                !
   ---------------------------------------------------------
                !
   CHECK ECO    !  Подтверждает внесение исправлений, свя-
                !
                !  занных с определенными уровнями ECO
                !
   CHECK NOT ECO!  Подтверждает, что определенные уровни
                !
                !  ECO имеются в распоряжении для использо-
                !
                !  вания
                !
   CREATE       !  Открывает командную процедуру, для кото-
                !
                !  рой написаны все последующие положитель-
                !
                !  ные команды PATCH
                !
   SET ECO      !  Определяет уровень ECO для данного ис-
                !
                !  правления
                !
   UPDATE       !  Устанавливает уровень ECO и вводит ис-
                !
                !  правление в файл образов
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
                            - 30 -
 
                         00152-01 33 05
 
 
                                                     Таблица 3
 
        Команды для манипулирования областью исправлений
 
 
   --------------------------------------------------------
                         !
      Команда            !           Описание
                         !
   ---------------------------------------------------------
                         !
   ALIGN                 ! Стыкует первый свободный байт те-
                         !
                         ! кущей области исправлений на опре-
                         !
                         ! деленной границе и определяет сим-
                         !
                         ! вол для этого адреса
                         !
   CANCEL PATCH_AREA     ! Прекращает использование текущей
                         !
                         ! области исправлений, определенной
                         !
                         ! пользователем, и переводит на ис-
                         !
                         ! пользование области исправлений
                         !
                         ! для ошибок
                         !
   DEPOSIT/PATCH_AREA    ! Помещает данные или инструкции
                         !
                         ! MACRO СМ 1700 в текущей области
                         !
                         ! исправлений
                         !
   INSERT/INSTRUCTION    ! Вводит одну или несколько инструк-
                         !
                         ! ций МАCRO CM 1700 в текущую область
                         !
                         ! исправлений
                         !
   SET PATCH_AREA        ! Устанавливает определенную пользо-
                         !
                         ! вателем область исправлений как
                         !
                         ! текущую область исправлений
                         !
   SHOW PATCH_AREA       ! Воспроизводит дескриптор текущей
                         !
                         ! области исправлений
 
 
 
 
 
 
 
 
 
 
 
                            - 31 -
 
                         00152-01 33 05
 
 
                                                     Таблица 4
 
            Команды для проверки и модификации ячеек
 
 
   ----------------------------------------------------------
                          !
      Команда             !          Описание
                          !
   ----------------------------------------------------------
                          !
   DELETE                 !Подтверждает текущее содержимое
                          !
                          !одной или нескольких соседних
                          !
                          !ячеек, а затем заменяет содержимое
                          !
                          !инструкциями или нулями
                          !
   DEPOSIT                !Помещает новые значения в одну или
                          !
                          !несколько соседних ячеек
                          !
   EXAMINE                !Воспроизводит содержимое одной или
                          !
                          !нескольких ячеек
                          !
   INSERT/INSTRUCTION     !Подтверждает текущее содержимое
                          !
                          !ячейки, а затем вводит одну или
                          !
                          !несколько инструкций маCRO CM 1700
                          !
                          !после этой ячейки
                          !
   REPLACE                !Подтверждает содержимое одной или
                          !
                          !нескольких соседних ячеек, а затем
                          !
                          !заменяет их содержимое новым содер-
                          !
                          !жимым
                          !
   VERIFY                 !Подтверждает содержимое одной или
                          !
                          !нескольких соседних ячеек
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
                            - 32 -
 
                         00152-01 33 05
 
 
                                                     Таблица 5
 
              Команды для управления режимами PATCH
 
 
   -----------------------------------------------------------
                 !
     Команда     !                 Описание
                 !
   -----------------------------------------------------------
                 !
   CANCEL MODE   ! Отменяет установки текущего режима и восста
                 !
                 ! нановливает уставки первоначального режима
                 !
   SET MODE      ! Устанавливает новые режимы ввода и воспро-
                 !
                 ! изведения
                 !
   SHOW MODE     ! Воспроизводит установки текущего режима
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
                            - 33 -
 
                         00152-01 33 05
 
 
                                                     Tаблица 6
 
         Команды для выражения символов и условных имен
 
 
   -----------------------------------------------------------
                  !
     Команда      !                Описание
                  !
   -----------------------------------------------------------
   CANCEL MODULE  !Исключает локальные символы и имена
                  !
                  !секций программы, определенные в указанном
                  !
                  !модуле, из таблицы символов PATCH
                  !
   CANCEL SCOPE   !Отменяет текущую символьную область огра-
                  !
                  !ничения и восстанавливает "нулевую"
                  !
                  !область ограничения
                  !
   DEFINE         !Уравнивает символьное имя со зна-
                  !
                  !чением
                  !
   EVALUATE       !Воспроизводит текущее символьное определе-
                  !
                  !ние и определение значения
                  !
   SET MODULE     !Вводит локальные символы и имена
                  !
                  !секций программы, определенные в указанном
                  !
                  !модуле, в таблицу символов PATCH
                  !
   SET SCOPE      !Определяет текущую символьную область
                  !
                  !ограничения
                  !
   SHOW MODULE    !Воспроизводит все модули в файле образов,
                  !
                  !подвергавшиеся исправлениям, и указывает
                  !
                  !введены ли локальные символы, содержащиеся
                  !
                  !в этих модулях, в таблицу символов PATCH
                  !
   SHOW SCOPE     !Воспроизводит текущую символьную область
                  !
                  !ограничения
 
 
 
 
 
 
 
 
 
 
                            - 34 -
 
                         00152-01 33 05
 
 
                    3. Обращение к программе
 
 
 
 
        В интерактивной работе с терминалом PATCH  запускается
 
   командой DCL:
 
 
        $ PATCH спецификация файла <BK>
 
 
        обозначение ''спецификация файла'' указывает имя вход-
 
   ного файла образов, подлежащего исправлению.
 
 
        После нажатия клавиши <BK> PATCH воспроизводит вводное
 
   сообщение, а затем показывает готовность  к  приему  команд
 
   путем выдачи следующего запроса: PATCH>.
 
 
        После включения PATCH в работу можно прервать исполне-
 
   ние программы путем нажатия УС/Y (CTRL/Y)  (воспроизводится
 
   как  ^Y).  Введение  этой  команды  возвращает   управление
 
   интерпретатору команд МОС ВП. Если вы приняли  решение  все
 
   же продолжать исполнять работу с помощью PATCH, то  следует
 
   ввести команду CONTINUE.
 
 
        Для  прекращения  работы  PATCH  следует  ввести  либо
 
   команду EXIT, либо УС/Z (CTRL/Z).
 
 
        В разделе 5 приводится полное описание,  с  примерами,
 
   порядка запуска и остановления PATCH, включая указания  как
 
   заменить командные процедуры на интерактивный или  пакетный
 
   режим обработки.
 
 
 
 
 
 
 
 
 
 
 
                            - 35 -
 
                         00152-01 33 05
 
 
                  4. Входные и выходные данные
 
 
 
 
        Вводом для программы PATCH служат: входной файл  обра-
 
   зов, который нужно обновить и команды PATCH,  которые  осу-
 
   ществляют требуемые  операции  обновления.  Можно  подавать
 
   команды PATCH непосредственно со своего терминала или  вво-
 
   дить команды в  форме  командной  процедуры  в  порядке  их
 
   исполнения, а затем заменять командную процедуру  на  инте-
 
   рактивный или пакетный режим обработки.
 
 
        PATCH в качестве выходов создает один или несколько из
 
   следующих файлов:
 
 
          - выходной файл образов;
 
 
          - журнальный файл;
 
 
          - командная процедура.
 
 
        Выходной файл образов и командная  процедура  являются
 
   произвольно выбираемыми файлами. Для их создания необходимо
 
   ввести запрос в PATCH. Журнальный файл PATCH создает  авто-
 
   матически.
 
 
 
        4.1. Входной файл образов
 
 
 
        Входным файлом образов является файл, который  следует
 
   обновить. Поскольку PATCH не зависит от языка  программиро-
 
   вания, можно ее использовать для обновления файла  образов,
 
   записанного на любом языке, имеющемся в операционной систе-
 
   ме МОС ВП. Входной файл образов может содержать разделяемые
 
   образы, образы драйвера устройства или исполнительные обра-
 
 
                            - 36 -
 
                         00152-01 33 05
 
 
   зы. Единственным ограничением является  то  ,  что  входной
 
   файл образов должен быть создан программой СМ 1700 LINKER.
 
 
        PATCH никогда не меняет входной  файл  образов.  Когда
 
   включается в работу PATCH , создается копия входного  файла
 
   образов, а затем вносятся  изменения  в  эту  копию.  Таким
 
   образом, имеется возможность проверить новый файл образов и
 
   если он выполняется  некорректно  сохранить  первоначальный
 
   файл для повторного исправления.
 
 
 
        4.1.1. Разделяемые образы
 
 
 
        Под разделяемым образом подразумевается образ, который
 
   не имеет начального адреса и должен быть связан с одним или
 
   несколькими об'ектными модулями для  создания  выполняемого
 
   образа.
 
 
        При исправлении разделяемых образов необходимо иметь в
 
   виду следующие ограничения:
 
 
          - можно определять только универсальные символы  при
 
            исправлении разделяемого образа ;
 
 
          - предпочитательней использовать определяемую  поль-
 
            зователем  область  исправлений   для   накопления
 
            дополнительных инструкций и  данных,  чем  область
 
            для исправления ошибок .
 
 
 
        4.1.2. Образы драйвера устройства
 
 
 
        Под образом драйвера устройства подразумевается  набор
 
   правил и таблиц,  используемых  операционной  системой  для
 
 
                            - 37 -
 
                         00152-01 33 05
 
 
   обработки запроса ввода-вывода для устройства  конкректного
 
   типа.для исправления  образа  драйвера  устройства  следует
 
   использовать определяемую пользователем область исправлений
 
   для накопления дополнительных инструкций и данных , и  ста-
 
   раться не пользоваться областью исправления ошибок для этих
 
   целей .
 
 
 
        4.1.3. Выполняемые образы
 
 
 
        Выполняемый образ является найболее общим и  распрост-
 
   раненным типом образа. Выполняемый образ является одним  из
 
   тех,  которые  могут  запускаться  процессом.   Исправление
 
   выполняемого образа не требует специальных правил или огра-
 
   ничений.
 
 
 
        4.2. Выходной файл образов
 
 
 
        Выходной файл образов представляет  собой  обновленный
 
   входной файл образов. Он содержит все изменения,  внесенные
 
   по командам и первоначальные данные, которые  не  подверга-
 
   лись изменениям. Выходной  файл  образов  всегда  создается
 
   после подачи команды UPDATE. Если команда не подана,  PATCH
 
   не создает выходной файл образов.
 
 
        В течение одного цикла работы PATCH можно вносить нес-
 
   колько исправлений в файл образов. Когда исправление закон-
 
   чено ( путем подачи команды UPDATE ) PATCH обновляет выход-
 
   ной файл образов. Первая команда  UPDATE  создает  выходной
 
   файл образов; последующие команды  UPDATE  (  подаваемые  в
 
   течение текущего цикла PATCH ) переписывают этот файл.
 
 
 
                            - 38 -
 
                         00152-01 33 05
 
 
        После исправления ошибок спецификация выходного  файла
 
   образов содержит имя и тип входного файла образов, а  также
 
   номер версии на 1 больше, чем номер версии  входного  файла
 
   образов. Кроме того, после исправления файл записывается  в
 
   вашем устройстве текущего процесса и  фиксируется  в  вашем
 
   каталоге.
 
 
        Для изменения спецификации исправленного файла необхо-
 
   димо использовать квалификатор команды /OUTPUT совместно  с
 
   командой PATCH.
 
 
 
        4.3. Журнальный файл
 
 
 
        Журнальный файл обеспечивает полную запись всех команд
 
   PATCH, поданных в ходе редактирования входного файла  обра-
 
   зов. Ввод в журнальный  файл  создается  каждый  раз  когда
 
   обрабатывается команда PATCH. Поэтому журнальный файл обес-
 
   печивает запись не только действительно произведенных изме-
 
   нений, но и  безуспешных  попыток  отредактировать  входной
 
   файл образов.
 
 
        Журнальный  файл  ведется  для  каждого  цикла  работы
 
   PATCH. Если  для  данного  конкретного  файла  образов  уже
 
   имеется журнальный файл, то новые журнальные записи  прила-
 
   гаются к нему. В остальных случаях PATCH создает журнальный
 
   файл с таким же именем, что и  у  входного  файла  образов,
 
   указанием типа файла JNL и номером версии 1. После  исправ-
 
   ления ошибок файл воспроизводится в вашем каталоге.
 
 
        Для изменения  спецификации  журнального  файла  после
 
   исправления ошибок следует использовать квалификатор коман-
 
 
 
                            - 39 -
 
                         00152-01 33 05
 
 
   ды /JOURNAL совместно с командой PATCH.
 
 
        Вводы в журнальный файл записываются в виде  текста  в
 
   символьном коде, что позволяет  проверять  содержимое  жур-
 
   нального файла просто подавая команду DCL PRINT или TYPE.
 
 
        Пример журнального файла:
 
 
           PATCH VERSION 2.0 15 MAR 80
 
   IMAGE FILE BEGIN PATCHED:   'DM1:[EAGLE]AVERAGE.EXE;2'
 
   JOURNAL FILE:               'DM1:[EAGLE]AVERAGE.JNL;1'
 
   DATE/TIME OF PATCH           20-MAR-1980 12:36:05.53
 
   PATCH>CREATE AVERCMD
 
   COMMAND FILE:               'DM1:[EAGLE]AVERCMD.COM;1'
 
   PATCH>SET ECO 1
 
   PATCH>SET MODE NOSYMBOLS,INSTRUCTION
 
   PATCH>SHOW MODE
 
   MODES:NOSYMBOLS,INSTRUCTION,NOASCII,SCOPE,NOGLOBALS,
 
                             HEXADECIMAL,LONG
 
   PATCH>EXAMINE 627
 
   00000627:        PUSHAL        L^00000224
 
   PATCH>INSERT/INSTRUCTION
 
   LOC>627
 
   OLD>'PUSHAL L^00000224'
 
   NEW>'DECL (RO)'
 
   NEW>EXIT
 
   OLD:        00000627:        PUSHAL L^00000224
 
   NEW:        00000627:        BRW  00007800
 
   NEW:        0000062A:        NOP
 
   NEW:        0000062B:        NOP
 
   NEW:        0000062C:        NOP
 
 
 
                            - 40 -
 
                         00152-01 33 05
 
 
   NEW:        00007800:        PUSHAL L^00000224
 
   NEW:        00007806:        DECL (RO)
 
   NEW:        0000780B:        BRW  0000062D
 
   PRTCH>UPDATE
 
   %PATCH-I-WRTFIL,UPDATING IMAGE FILE DM1:[EAGLE]AVERAGE.EXE;
 
   PATCH>EXIT
 
           PATCH VERSION 2.0 15 MAR 80
 
   IMAGE FILE BEGIN PATCHED:   'DM1:[EAGLE]AVERAGE.EXE;3'
 
   JOURNAL FILE:               'DM1:[EAGLE]AVERAGE.JNL;1'
 
   DATE/TIME OF PATCH:          21-MAR-1980 15:38:11.36
 
   PATCH>SET ECO 2
 
   PATCH>SET MODE INSTRUCTION
 
   PATCH>EXAMINE AVERAGE+69
 
   AVERAGE+69:        TSTL R4
 
   PATCH>DELETE/NOSYMBOLS 669='TSTL R4'
 
   OLD:        00000669:        TSTL R4
 
   NEW:        00000669:        NOP
 
   NEW:        0000066A:        NOP
 
   NEW:        0000066B:        NOP
 
   PATCH>UPDATE
 
   %PATCH-I-WRTFIL,UPDATING IMAGE FILE DM1:[EAGLE]AVERAGE.EXE;
 
   PATCH>EXIT
 
 
 
        4.4. Командные процедуры
 
 
 
        Для внесения исправлений в файл образов можно  исполь-
 
   зовать командную процедуру. Командная  процедура  представ-
 
   ляет собой последовательность команд и , выборочно, входных
 
   данных.
 
 
 
 
                            - 41 -
 
                         00152-01 33 05
 
 
        Командная процедура  представляет  собой  файл  команд
 
   PATCH , который при выполнении  командной  процедуры  будет
 
   вносить  исправления  в  конкретный  файл  образов.  Обычно
 
   командная процедура создается для облегчения задачи исправ-
 
   ления многих копий конкретного файла образов. Вместо  того,
 
   чтобы  вручную  исправлять  каждый  файл,  можно   заменить
 
   командной процедурой интерактивный или пакетный режим обра-
 
   ботки.
 
 
        Имеются два пути  создания  командных  процедур.  Один
 
   путь состоит в использовании команды PATCH  CREATE.  Второй
 
   путь состоит в испльзовании редактора текстов.
 
 
 
        4.4.1. Использование   команды   CREATE    для
 
               создания командных процедур
 
 
 
        После запуска PATCH подается команда CREATE для запро-
 
   са на создание  командной  процедуры.  PATCH  автоматически
 
   вносит имя входного файла образов в качестве первого  ввода
 
   в командную процедуру. Все последующие команды PATCH  затем
 
   вписываются в этот файл.
 
 
        Когда PATCH записывает команды в командной  процедуре,
 
   все символьные обозначения меняются на абсолютные значения.
 
   Это происходит потому, что  этапы,  которые  трансформируют
 
   программу в файл образов , не обязательно включают передачу
 
   символьной информации в файл образов. Например,  если  файл
 
   образов компануется без квалификатора /DEBUG ,  ни  локаль-
 
   ная, ни глобальная символьная информация  не  появляется  в
 
   таблице символов образа.  Кроме  того,  когда  используется
 
   команда CREATE  для  создания  командной  процедуры,  PATCH
 
 
                            - 42 -
 
                         00152-01 33 05
 
 
   меняет все символьные обозначения на абсолютные значения  в
 
   случае, если файл образов, к которому  относится  командная
 
   процедура, не содержит символьной информации.
 
 
        Для экономии пространства PATCH автоматически  обозна-
 
   чает все команды в командной процедуре аббревиатурами.
 
 
 
        4.4.2. Использование текстового редактора  для
 
               создания командных процедур
 
 
 
        Для конструирования командных процедур можно использо-
 
   вать текстовый редактор. В  этом  случае  в  первой  строке
 
   командной процедуры должно быть имя входного файла образов,
 
   подлежащего исправлению.  Затем  в  файл  вводится  цепочка
 
   команд PATCH в том порядке, в котором PATCH должен  обрабо-
 
   тать их.
 
 
        Пример.
 
 
           $ EDIT TEST.COM
 
           INPUT:       DM1:[TERHUNE]TEST.COM;1
 
           00100        AVERAGE.EXE;3
 
           00200        SET ECO 11
 
           00300        DEPOSIT/ASCII 506 = 'RUN'
 
           00400        UPDATE
 
           00500        EXIT
 
           00600        ^Z
 
           *E
 
 
        Этот файл, называемый TEST.COM, содержит  исправление,
 
   идентифицированное с уровнем ECO=11,  KOторое  должно  быть
 
   внесено в файл образов AVERAGE.EXE;3. Для того, чтобы обра-
 
 
                            - 43 -
 
                         00152-01 33 05
 
 
   ботать командную процедуру интерактивно, необходимо напеча-
 
   тать: $ PATCH @TEST.
 
 
        При использовании текстового  редактора  для  создания
 
   командной процедуры можно вводить  символьные  обозначения,
 
   если выполняется одно из следующих условий:
 
 
        1) символьные имена  ранее  были  определены  в  файле
 
   образов, к которому относится командная процедура;
 
 
        2) если используется команда DEFINE при обработке всей
 
   командной процедуры, а не избранных  исправлений,  содержа-
 
   щихся в командной процедуре.
 
 
        Можно сокращать команды до принятых их сокращений  при
 
   создании командных процедур с помощью текстового редактора,
 
   однако рекомендуется записывать команды в полностью.
 
 
 
 
 
 
 
 
 
 
                            - 44 -
 
                         00152-01 33 05
 
 
                      5. РАБОЧИЕ ПРОЦЕДУРЫ
 
 
 
 
        Программа PATCH может работать тремя способами:
 
 
        1) в интерактивном режиме с терминала;
 
 
        2) заменой интерактивного выполнения командной  проце-
 
   дурой;
 
 
        3) заменой пакетного режима обработки командной проце-
 
   дурой.
 
 
        Данный раздел описывает, как включить PATCH для каждо-
 
   го из этих трех режимов работы.  В  ней  также  обсуждаются
 
   квалификаторы команд, которые распознает PATCH. Эти  квали-
 
   фикаторы определяют  спецификации  файлов  для  журнального
 
   файла образов, а также позволяют избирательно вносить инди-
 
   видуальные исправления в файл образов.
 
 
 
        5.1. Способы запуска программы PATCH
 
 
 
        Программа PATCH запускается одним из следующих  спосо-
 
   бов:
 
 
        1) $PATCH [/команда-квалификатор(ы)] спецификация фай-
 
   ла;
 
 
        2)  $PATCH  [/команда-квалификатор(ы)]   @спецификация
 
   файла;
 
 
        3) $SUBMIT спецификация файла.
 
 
 
 
                            - 45 -
 
                         00152-01 33 05
 
 
        Первый способ позволяет запустить PATCH  для  интерак-
 
   тивного взаимодействия с терминалом; второй  способ  позво-
 
   ляет интерактивно  выполнять  командную  процедуру;  третий
 
   способ позволяет  заменить  командной  процедурой  пакетный
 
   режим обработки.
 
 
        При любом из способов запуска PATCH, если спецификация
 
   файла не включена в начало цепочки команд,  то  PATCH  (или
 
   DCL) будет запрашивать ее.
 
 
        При запуске PATCH можно также устанавливать квалифика-
 
   торы команд. Эти квалификаторы контролируют  характеристики
 
   выходных файлов.
 
 
 
        5.1.1. Запуск   PATCH    для    интерактивного
 
               исполнения.
 
 
 
        Когда PATCH запускается для интерактивного исполнения,
 
   спецификация файла указывает тот файл образов, который под-
 
   лежит исправлению. Спецификация должна содержать имя файла;
 
   остальные параметры (устройство, каталог, тип файла и  вер-
 
   сия) могут быть  опущены.  По  умолчанию  PATCH  использует
 
   текущее устройство и каталог, тип файла ЕXE, а  также  пос-
 
   леднюю версию указанного файла.
 
 
        Пример показывает способ запуска PATCH для интерактив-
 
   ного взаимодействия с терминалом.
 
 
        Пример.
 
 
        $PATCH DM1:[MASSEY]CIRCLE
 
 
 
 
 
                            - 46 -
 
                         00152-01 33 05
 
 
        В примере PATCH запускается для  внесения  одного  или
 
   нескольких исправлений  в  файл  образов  CIRCLE.EXE.  Файл
 
   образов расположен на DM1:[MASSEY] и поскольку номер версии
 
   опущен, PATCH Oбновляет последнюю версию CIRCLE.EXE.  После
 
   нажатия клавиши <BK> PATCH воспроизводит следующее  вводное
 
   сообщение:
 
 
               PATCH VERSION 2.0 15 MAR 84
 
               PATCH>
 
 
        подсказка PATCH> указывает, что PATCH готов  к  приему
 
   вводных данных.
 
 
 
        5.1.2. Замена    командной    процедуры    для
 
               интерактивного выполнения
 
 
 
        Когда PATCH запускается  для  интерактивной  обработки
 
   командной процедуры, спецификация файла указывает командную
 
   процедуру, которая содержит:
 
 
        1) имя файла образов, в который должны вноситься  исп-
 
   равления;
 
 
        2) команды PATCH, KOторые при  обработке  осуществляют
 
   необходимые изменения в файле образов.
 
 
        Знак @, предшествующий спецификации файла,  показывает
 
   программе PATCH, что файл  является  командной  процедурой.
 
   Спецификация должна содержать имя файла; остальные парамет-
 
   ры (устройство, каталог, тип файла  и  версия)  могут  быть
 
   опущены. PATCH использует текущее устройство и каталог; тип
 
   файла сом, а также последнюю версию указанного файла.
 
 
 
                            - 47 -
 
                         00152-01 33 05
 
 
        Пример иллюстрирует как обработать командную процедуру
 
   интерактивно.
 
 
        Пример.
 
 
 
 
           $PATCH @UPDATE.COM;3
 
           $PATCH VERSION 2.0 15 MAR 80
 
           AVERAGE+6:    DIVL2 R5,(R0)
 
           AVERAGE+9:    CLRW  (R11)
 
           OLD: AVERAGE+9: CLRW (R11)
 
           NEW: AVERAGE+9: CLRL (R11)
 
           %PATCH-I-W
 
           %PATCH-I-WRITFIL
 
           $
 
 
        Командная процедура UPDATE.COM запускается для  выпол-
 
   нения с помощью PATCH. На дисплее воспроизводится исправле-
 
   ние и файл, к которому относится исправление. Знак ($) ука-
 
   зывает на завершение командной процедуры.
 
 
        В командной процедуре можно также обрабатывать избран-
 
   ные исправления. Для этого необходимо связать  квалификатор
 
   команды с командой PATCH .
 
 
 
        5.1.3. Замена командной процедуры для пакетной
 
               работы
 
 
 
        Когда  необходимо  заменить  командную  процедуру   на
 
   пакетную работу, используется третий способ запуска  PATCH.
 
   В этом случае спецификация файла  указывает  имя  командной
 
   процедуры, которая содержит:
 
 
                            - 48 -
 
                         00152-01 33 05
 
 
        1) команду ,которая запускает PATCH;
 
 
        2) имя файла образов, в который должны вноситься  исп-
 
   равления;
 
 
        3) команды PATCH, которые при  обработке  осуществляют
 
   необходимые изменения в файле образов.
 
 
        Команда SUMBIT вводит командную процедуру в последова-
 
   тельность пакетной работы.  Необходимо  указать  имя  файла
 
   командной процедуры. Остальные параметры (устройство, ката-
 
   лог, тип файла и версия) могут быть опущены. Команда SUMBIT
 
   для исправления  ошибок  использует  текущие  устройство  и
 
   каталог, тип файла сом, а также последнюю версию указанного
 
   файла.
 
 
 
        5.2. Квалификаторы команды PATCH
 
 
 
        Квалификаторами  ,  которые  распознаются   программой
 
   PATCH, являются /JOURNAL,/OUTPUT, /аBSOLUTE,  /NEW_VERSION,
 
   /VOLUME и  /UPDATE.  Эти  квалификаторы  могут  произвольно
 
   выбираться и использоваться в работе. При их  использовании
 
   они позволяют:
 
 
        -заменять ошибочные спецификации файлов;
 
 
        -обрабатывать избранные исправления в командной проце-
 
   дуре.
 
 
        Можно вводить несколько квалификаторов команд в  одной
 
   цепочке команд, но каждому квалификатору должен предшество-
 
   вать знак (/).
 
 
 
 
                            - 49 -
 
                         00152-01 33 05
 
 
        В табл.7 перечисляются и кратко описываются  указанные
 
   квалификаторы.
 
 
 
 
 
 
 
  
 
 
 
 
 
 
 
                            - 50 -
 
                         00152-01 33 05
 
 
                                                     Tаблица 7
 
                   Квалификаторы команд PATCH
 
 
 
   -----------------------------------------------------------
                                  !
        Формат                    !     Описание
                                  !
   -----------------------------------------------------------
                                  !
   /JOURNAL  [=спецификация файла]!  Заменяет ошибочную специ-
                                  !
                                  !  фикацию журнального файла
                                  !
   /OUTPUT   [=спецификация файла]!  Заменяет ошибочную специ-
                                  !
                                  !  фикацию файла образов
                                  !
   /ABSOLUTE                      !  Изменяет файл в абслютных
                                  !
                                  !  виртуальных адресах
                                  !
   /NEW_VERSION                   !  Создает новую версию
                                  !
                                  !  измененного файла
                                  !
   /VOLUME [=N]                   !  Помещает выводной файл на
                                  !
                                  !  том с указанным номером
                                  !
   /UPDATE [=(ECO-LEVEL[,...])]   !  Обрабатывает только те
                                  !
                                  !  исправления, которые
                                  !
                                  !  связаны с определенными
                                  !
                                  !  уровнями есо.
 
 
 
        5.2.1. Квалификаторы  для   замены   ошибочных
 
               спецификаций файлов
 
 
 
        Квалификаторами, которые позволяют заменять  ошибочные
 
   спецификации файлов, являются /JOURNAL и /OUTPUT.  Квалифи-
 
   катор /JOURNAL позволяет  менять  спецификацию  журнального
 
   файла, а квалификатор /OUTPUT позволяет менять спецификацию
 
   выходного файла образов.
 
 
 
 
                            - 51 -
 
                         00152-01 33 05
 
 
        Нет необходимости заполнять все парамеры в  специфика-
 
   ции файла квалификаторов /JOURNAL и /OUTPUT.  PATCH  запол-
 
   няет параметы,  пропущенные  пользователем,  значениями  по
 
   умолчанию. Значения, используемые PATCH по умолчанию, пере-
 
   числены и определены в табл. 8.
 
 
 
 
 
 
 
 
 
 
  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
                            - 52 -
 
                         00152-01 33 05
 
 
                                                     Таблица 8
 
         Значения по умолчанию для квалификаторов команд
 
 
 
 
 
   -----------------------------------------------------------
                     !                    !
   Квалификаторы     !   Параметры        !   Значения
                     !                    !
    команды          !                    !  по умолчанию
                     !                    !
   -----------------------------------------------------------
                     !                    !
   /JOURNAL [=спец.  !     Устройство и   ! Исправление ошибок
                     !                    !
            файла]   !     каталог        ! текущего процесса
                     !                    !
                     !                    !
                     !                    !
                     !     Имя            ! Имя вход-
                     !                    !
                     !     файла          ! ного файла образов
                     !                    !
                     !                    !
                     !                    !
                     !     Тип файла      !     JNL
                     !                    !
                     !                    !
                     !                    !
                     !     Номер версии   !      1
                     !                    !
   /OUTPUT [=специф. !     Устройство и   !Исправление ошибок
                     !                    !
        файла]       !     каталог        !текущего процесса
                     !                    !
                     !                    !
                     !                    !
                     !     Имя            ! Имя
                     !                    !
                     !     файла          ! входного файла
                     !                    !
                     !                    ! образов
                     !                    !
                     !     Тип файла      ! ЕXE
                     !                    !
                     !     Номер версии   ! На 1 больше, чем
                     !                    !
                     !                    ! номер последней
                     !                    !
                     !                    ! версии входного
                     !                    !
                     !                    ! файла образов
 
 
 
 
 
 
                            - 53 -
 
                         00152-01 33 05
 
 
        Примеры 1,2 показывают некоторые распространенные фор-
 
   маты для включения PATCH с квалификаторами команд  /JOURNAL
 
   и /OUTPUT.
 
 
        Примеры:
 
 
        1. $PATCH AVERAGE /JOURNAL=DM1:[JACKSON]TEST
 
 
        Эта команда включает PATCH для интерактивной работы  с
 
   файлом образов AVERAGE.EXE. Квалификатор /JOURNAL  требует,
 
   чтобы журнальный файл назывался TEST.JNL и чтобы он  созда-
 
   вался в каталоге DM1:[JACKSON].
 
 
        2. $PATCH PAYROLL/JOURNAL=TESTER/OUTPUT=TESTER
 
 
        Эта команда включает PATCH для интерактивной работы  с
 
   файлом образов PAYROLL.EXE. Журнальный файл и выходной файл
 
   образов,создаваемые во время этого сеанса работы,называются
 
   теSTER.JNL и  TESTER.EXE,  соответственно,  и  находятся  в
 
   действующем устройстве и каталоге.
 
 
 
        5.2.2. Квалификатор /ABSOLUTE
 
 
 
        Этот квалификатор изменяет файл в абсолютных виртуаль-
 
   ных адресах.
 
 
        Формат:
 
 
        /ABSOLUTE
 
 
        Функция квалификатора /аBSOLUTE позволяет пользователю
 
   изменять файл (необязательно файл образа) в абсолютных вир-
 
   туальных адресах относительно начала файла. Эта возможность
 
   позволяет осуществлять замену существующих  данных  новыми,
 
 
                            - 54 -
 
                         00152-01 33 05
 
 
   но той же длины. Если данные по своему размеру меньше заме-
 
   няемых, то программа PATCH использует соответсвующий  теку-
 
   щему режиму знак заполнения. Например, если текущий режим -
 
   режим инструкций, то используется для заполнения знаки  NOP
 
   (невыполняющаяся операция). Если используется режим  данных
 
   (цифровых или символьных), то для  заполнения  используется
 
   NULL. Любая операция программы PATCH,  которая  приводит  к
 
   замене данных большего размера, чем размер исходных данных,
 
   генерирует сообщение об ошибке  и  завершает  выполняющуюся
 
   команду. Затем выводится подсказка программы PATCH или  DCL
 
   (диалоговый язык команд).
 
 
        По умолчанию не существует область вставок и ничего не
 
   будет создаваться из-за возможности разрушить файл. Область
 
   вставок бессмыслена в файлах, отличых от файла образа.
 
 
        Если файлы изменяются в абсолютом режиме, имейте  вви-
 
   ду, что нет символов, которые помогли бы  обнаружить  адрес
 
   данных. Необходимо проявлять большую  осторожность  и  быть
 
   уверенным, что исправляются верные адреса.
 
 
        Большинство команд PATCH будет работать в своем  обыч-
 
   ном режиме. Однако для операции записи должны использовать-
 
   ся только команды  REPLACE  и  DEPOSIT.  Остальные  команды
 
   воспринимаются как  операции  чтения.  Необходимо  избегать
 
   использования команд ALIGN и INSERT,  пытающихся  расширять
 
   файл, так как они вероятно могут его разрушить. (эти коман-
 
   ды будут прерваны программой PATCH и появятся сообщения  об
 
   ошибке, указывающие, что замещающие данные не должны превы-
 
   шать длины заменяемых данных.)
 
 
 
 
 
                            - 55 -
 
                         00152-01 33 05
 
 
        Признаки файла переходят из исходного  файла  ввода  в
 
   выходной файл. Этими признаками являются: ALQ,  TYPE,  MRS,
 
   RAT, RFM и RAC.
 
 
 
        5.2.3. Квалификатор /NEW_VERSION
 
 
 
        Данный квалификатор  определяет,  создается  ли  новая
 
   версия измененного файла или записывается вместо старого.
 
 
        Формат:
 
 
        /[NO]NEW_VERSION
 
 
        Квалификатор /NEW_VERSION используется в  сочетании  с
 
   квалификатором /ABSOLUTE для определения  того,  должна  ли
 
   создаваться новая версия изменяемого файла или нужно  изме-
 
   нять на месте содержимое  существующего  файла.квалификатор
 
   /NEW_VERSION является значением по  умолчанию.  Если  выби-
 
   рается квалификатор /NONEW_VERSION, то команда UPDATE будет
 
   выполняться как операция контрольной  точки.  То  есть  все
 
   изменения, сделанные для этого файла, перепишутся обратно в
 
   него вместо того, чтобы  ожидать  завершения  образа.  Если
 
   квалификатор /ABSOLUTE не указан  вместе  с  квалификатором
 
   /NONEW_VERSION, то последний игнорируется, то есть создает-
 
   ся новая версия файла. Квалификатор  /NONEW_VERSION  бывает
 
   нужен при изменении больших файлов данных, когда области на
 
   диске бывает не  достаточно,  чтобы  создать  новую  версию
 
   изменяемого файла.
 
 
        Если указан квалификатор /NEW_VERSION, то  файл  будет
 
   перезаписан. Попытка со стороны пользователя, включая нажа-
 
   тие клавиш ус/Y, не предотвратит такого результата. Поэтому
 
 
                            - 56 -
 
                         00152-01 33 05
 
 
   полезно сделать копию исправляемого файла.
 
 
        Программа PATCH всегда будет выдавать  при  выходе  из
 
   образа информационное сообщение,  указывающие  на  то,  что
 
   файл перезаписан.
 
 
 
        5.2.4. Квалификатор  команды   для   обработки
 
               избранных исправлений
 
 
 
        Квалификатор /UPDATE позволяет вносить в файл  образов
        
   только те исправления, которые соответствуют  уровням  есо,
 
   связанным  с  /UPDATE.  Когда   используется   квалификатор
 
   /UPDATE, спецификация файла может обозначать либо командную
 
   процедуру, которая содержит исправления,  подлежащие  обра-
 
   ботке, либо файл образов, к  которому  относятся  некоторые
 
   исправления.
 
 
        Для командных процедур применяется формат:
 
 
        $PATCH /UPDATE=(ECO-уровень[,...]) @спецификация файла
 
 
        для файла образов применяется формат:
 
 
        $PATCH /UPDATE=(ECO-уровень[,...]) спецификация файла
 
 
        При  использовании  квалификатора  /UPDATE  необходимо
 
   определить по меньшей мере один уровень есо.  Если  опреде-
 
   ляются больше, чем один уровень есо,  то  значения  уровней
 
   есо разделяются запятыми, а весь список заключается в скоб-
 
   ки.
 
 
 
 
 
 
 
 
                            - 57 -
 
                         00152-01 33 05
 
 
        5.2.4.1. Обработка   избранных   исправлений   в
 
                 командных процедурах
 
 
 
        Программа PATCH предполагает, что данный файл является
 
   командной процедурой, если спецификации файла  предшествует
 
   знак (@). PATCH считывает командную процедуру  и  выполняет
 
   те исправления, которые соответствуют уровням есо,  связан-
 
   ным с квалификатором /UPDATE. Первой  записью  в  командной
 
   процедуре всегда является  имя  файла  образов,  в  который
 
   должны быть внесены данные исправления.
 
 
        Если командная процедура содержит символьные обозначе-
 
   ния, то не следует пытаться вносить  избранные  исправления
 
   из этой командной процедуры в файл  образов.  Это  не  дает
 
   результатов потому, что PATCH проверяет каждое  исправление
 
   в командной процедуре на наличие  определения  уровня  есо,
 
   связанного с квалификяатором команды /UPDATE. Если  в  ходе
 
   операции проверки PATCH Oбнаруживает символ, определенный в
 
   исправлении, который не должен вноситься в файл образов, то
 
   в этом случае PATCH собщает об обнаружении ошибки в команд-
 
   ной процедуре.
 
 
        При считывании программой PATCH  командной  процедуры,
 
   она воспроизводит на терминале следующую информацию:
 
 
        1) вводное сообщение PATCH;
 
 
        2) исправления, вносимые в файл образов;
 
 
        3) сообщения об ошибках есо:
 
 
        - уровни есо, связанные с квалификатором  /UPDATE,  но
 
   уже внесенные в файл образов;
 
 
                            - 58 -
 
                         00152-01 33 05
 
 
        - уровни есо, имеющиеся в командной процедуре,  но  не
 
   связанные с квалификатором /UPDATE.
 
 
        Пример показывает, как PATCH выполняет избранные  исп-
 
   равления в командной процедуре TEST1.COM.
 
 
        Пример.
 
 
           $PATCH /UPDATE=(10,12) @[JOHNSON.FORTRAN]TEST1.COM
 
           $PATCH VERSION 2.0   15 MAR 80
 
           DRM1: OEFDE4900
 
           OLD DRM1: 0EFDE4800
 
           NEW: DRM1: 00000000
 
           %PATCH-I-WRTFIL
 
           %PATCH-I-UPDATE
 
           AMSTR+50: 6B5C4005
 
           OLD: AMSTR+50: 6B504005
 
           NEW: AMSTR+50: 00000000
 
           %PATCH-I-WRTFIL
 
 
        Эта  команда  PATCH  выполняет   командную   процедуру
 
   [JOHNSON.FORTRAN] TEST1.COM в интерактивном режиме.  Квали-
 
   фикатор команды /UPDATE требует, чтобы только  исправления,
 
   идентифицированные уровнями есо 10  и  12,  содержащиеся  в
 
   TEST1.COM, вносились в файл образов  PROGB.EXE  в  каталоге
 
   [MATTHEWS.FORTRAN]. Дисплей  показывает,  что  исправления,
 
   связанные с квалификатором /UPDATE успешно вносятся в  файл
 
   PROGB.EXE, A TAKже сообщает, что исправление, идентифициро-
 
   ванное с уровнем есо 11 не  было  внесено,  поскольку  этот
 
   уровень есо не связан с квалификатором /UPDATE.
 
 
        При интерактивном выполнении командной процедуры  ква-
 
 
 
                            - 59 -
 
                         00152-01 33 05
 
 
   лификатор  команды  /UPDATE  должен  предшествовать   именю
 
   командной процедуры.
 
 
        Если  не  включается   квалификатор   /UPDATE,   PATCH
 
   обрабатывает все исправления в командной процедуре.
 
 
 
        5.2.4.2. Интерактивниая   обработка    избранных
 
                 исправлений
 
 
 
        При включении квалификатора /UPDATE совместно с  вход-
 
   ным файлом образов PATCH обрабатывает только  те  исправле-
 
   ния, которые представлены уровнями есо, связанными с квали-
 
   фикатором /UPDATE.
 
 
        Eсли при  редактировании  файла  образов  пользователь
 
   определяет  уровень  есо,  не  связанный  с  квалификатором
 
   /UPDATE, PATCH игнорирует последующие команды и воспроизво-
 
   дит информационное сообщение об ошибке.
 
 
        Пример.
 
 
           $PATCH /UPDATE=(2,4)CIRCLE
 
           PATCH VERSION 2.0 15 MAR 80
 
           PATCH> ECO 2
 
             .
 
             .
 
             .
 
           PATCH>UPDATE
 
             .
 
             .
 
             .
 
           PATCH> SET ECO 3
 
 
                            - 60 -
 
                         00152-01 33 05
 
 
           %PATCH-I-UPDATE
 
           PATCH> SET ECO 4
 
 
        В примере PATCH  позволяет  обрабатывать  исправление,
 
   идентифицированное с уровнем есо 2; однако, если попытаться
 
   определить уровень есо 3, то PATCH воспроизведет сообщение,
 
   указывающее, что исправление не может  быть  внесено,  пос-
 
   кольку оно не было связано с /UPDATE.
 
 
        Следует также иметь ввиду, что если  какой-то  уровень
 
   есо был связан с квалификатором /UPDATE, но  не  устанавли-
 
   вался в течение данного сеанса работы PATCH, то по  оконча-
 
   нию работы PATCH выдает информационное сообщение об ошибке.
 
 
 
        5.2.5. Квалификатор /VOLUME
 
 
 
        При этом квалификаторе выводной файл помещается на том
 
   с указанным относительным номером многотомного набора.
 
 
        Формат:
 
 
        /VOLUME[=N]
 
 
   где N указывает относительный номер тома многотомного
 
   набора.
 
 
        Если N не указано, то, по умолчанию, он станет  равным
 
   относительному номеру выводного файла образа. Если  /VOLUME
 
   указан, то выводной файл образа помещается в первое доступ-
 
   ное место внутри многотомного набора.
 
 
        Пример.
 
 
 
 
 
                            - 61 -
 
                         00152-01 33 05
 
 
   $ PATCH/VOLUME=2 PAYROLL.EXE
 
 
        Данная команда создает выводной файл на томе с относи-
 
   тельным номером 2.
 
 
 
        5.3. Выход из программы PATCH
 
 
 
        Для прекращения сеанса работы PATCH необходимо  ввести
 
   команду ЕXIT. Эта команда возвращает управление интерпрета-
 
   тору команд. Однако следует иметь ввиду, что  для  создания
 
   выходного файла образов необходимо ввести команду UPDATE до
 
   выхода из совместной работы с PATCH.
 
 
        Пример.
 
 
           PATCH> UPDATE
 
           %PATCH-I-WRTFIL
 
           PATCH> EXIT
 
           $
 
 
        Если команда UPDATE выполняется  до  введения  команды
 
   EXIT, то управление перейдет к  интерпретатору  команд,  но
 
   выходной файл образов не будет записан. Эти  команды  также
 
   фиксируются в журнальном файле.
 
 
        Для прерывания выполнения программы следует напечатать
 
   ус/у(CTRL/Y) (воспроизводится как ^Y).  Эта  команда  также
 
   возвращает управление интерпретатору команд. Для  продолже-
 
   ния исправлений следует напечатать команду CONTINUE.
 
 
        Пример.
 
 
           PATCH    ^Y
 
 
 
                            - 62 -
 
                         00152-01 33 05
 
 
           $SHOW TIME
 
           3-AUG-1979 10:35:53
 
           $CONTINUE
 
           PATCH>
 
 
        Mожно  прекратить   работу   с   PATCH   путем   ввода
 
   ус/(CNTR/Z) (воспроизводится как ^Z). Это эквивалентно вве-
 
   дению команды EXIT.
 
 
 
 
                           6. Символы
 
 
 
 
        Программа  PATCH  является  символьной   обслуживающей
 
   программой. Это означает, что имеется  возможность  вводить
 
   символьную информацию в PATCH или определять новые  символы
 
   в ходе сеанса работы PATCH, а затем использовать  эту  сим-
 
   вольную информацию в  качестве  вспомогательного  средства.
 
   Символьная  информация,  имеющаяся  в  распоряжении  PATCH,
 
   определяется некоторыми квалификаторами,  которые  вводятся
 
   или исключаются при компилировании  или  ассемблировании  и
 
   компоновке программы.
 
 
 
        6.1. Символы,   распознаваемые    программой
 
             PATCH
 
 
 
        программа PATCH рассматривает следующие типы символов:
 
 
        -глобальные символы;
 
 
        -локальные символы;
 
 
 
 
 
                            - 63 -
 
                         00152-01 33 05
 
 
        -имена модулей, имена секций программ  и  имена  прог-
 
   рамм;
 
 
        -универсальные символы;
 
 
        -символьные метки инструкций;
 
 
        -символы, определяемые командой PATCH.
 
 
        PATCH также распознает  символы  области  исправлений.
 
   Этот тип символов описывается в разд.7.
 
 
        Программа PATCH не может выбирать  локальные  метки  в
 
   программах на языке маCRO CM 1700. Локальные  метки  предс-
 
   тавляют собой символы, которые  содержат  число  (от  0  до
 
   65535), за которым следует знак ($).
 
 
 
        6.1.1. Глобальные символы
 
 
 
        Глобальные символы являются символами, определенными в
 
   одном модуле для выборки любым числом других модулей.
 
 
        Глобальный символ определяется  в  исходной  программе
 
   специальными операторами. Оператор  зависит  от  языка,  на
 
   котором написана программа. Например,  на  языке  маCRO  CM
 
   1700 глобальный символ обозначается двойным двоеточием (::)
 
   или двойным знаком равенства (==).
 
 
        Для включения информации о глобальных символах в PATCH
 
   необходимо использовать квалификатор /DEBUG при  компоновке
 
   программы.
 
 
 
 
 
 
 
                            - 64 -
 
                         00152-01 33 05
 
 
        6.1.2. Локальные символы
 
 
 
        Локальными символами являются символы, которые опреде-
 
   лены в конкретном модуле и могут быть выбраны  только  этим
 
   модулем.
 
 
        Локальный символ  определяется  в  исходной  программе
 
   специальным оператором.  Этот  оператор  зависит  от  языка
 
   программирования. Например, на языке маCRO CM 1700  локаль-
 
   ный  символ  обозначается  одним  двоеточием   или   знаком
 
   равенства.
 
 
        Для ввода информации  о  локальных  символах  в  PATCH
 
   необходимо включать отладчик программ  при  ассемблировании
 
   или компилировке и  компоновании  программ.  При  работе  с
 
   PATCH для ввода информации о локальных символах  в  таблице
 
   символов используется команда SET MODULE.
 
 
 
        6.1.3. Имена модулей, имена секций программ  и
 
               имена программ
 
 
 
        Имена модулей,секций программ и программ  всегда  вво-
 
   дятся в PATCH, если при компоновке программы не применялись
 
   квалификаторы /NODEBUG и /NOTRACEBACK. Если специфицированы
 
   эти квалификаторы-никакая символьная информация  не  посту-
 
   пает в PATCH.
 
 
        Для ограничения символьной информации  только  именами
 
   модулей, секций программ и программ необходимо  компоновать
 
   программу с квалификаторами /TRACEBACK и /NODEBUG.
 
 
 
 
 
                            - 65 -
 
                         00152-01 33 05
 
 
        6.1.4. Универсальные символы
 
 
 
        Универсальные символы включают совокупность глобальных
 
   символов разделяемого модуля. Это единственный  тип  симво-
 
   лов, на которыми пользуется PATCH при исправлении разделяе-
 
   мого модуля.
 
 
        Любой глобальный символ  достаточно  разборчив,  чтобы
 
   быть универсальным символом. Однако в большинстве случаев в
 
   совокупность глобальных символов, об'являемых универсальны-
 
   ми, включается только  ограниченное  количество  глобальных
 
   символов, поскольку не все символы требуются для конкретно-
 
   го применения и частичное об'явление символов снижает  мак-
 
   симальную нагрузку системы.
 
 
        Для об'явления символа универсальным  необходимо  опи-
 
   сать его,как UNIVERSAL во время компоновки программы.
 
 
        Пример.
 
 
           $LINK/SHAREABLE PROGA,PROGB/OPTIONS
 
           PROGB.OPT
 
           .
 
           .
 
           .
 
           UNIVERSAL=A,B,C
 
           .
 
           .
 
           .
 
 
        В приведенном примере символы A, B, и C об'явлены уни-
 
   версальными в разделяемом образе PROGA. Файл под  названием
 
 
 
                            - 66 -
 
                         00152-01 33 05
 
 
   PROGB.OPT является файлом  редакционных  опций,  в  котором
 
   содержатся декларации об универсальных символах.
 
 
        При применении универсальных  символов  в  разделяемом
 
   образе необходимо иметь в виду следующие указания:
 
 
        -если  разделяемый  образ  позиционно  независим,  все
 
   перемещаемые универсальные символы базируются на  нуле  (не
 
   на шестнадцатиричных 200, как может следовать из карты лин-
 
   кера). Поэтому при оценке универсального символа необходимо
 
   добавить  200  к  значению,  воспроизводимому  по   команде
 
   EVALUATE;
 
 
        -если символ связан с переходным вектором  и  об'явлен
 
   универсальным путем использования директивы. TRANSFER, зна-
 
   чением символа в таблице символов пользователя (UST) разде-
 
   ляемым образом является адрес  переходного  вектора,  а  не
 
   действительный программный адрес в образе.
 
 
        Таким образом, для того, чтобы PATCH определяла ячейки
 
   с помощью символов в непривязанном к нулю разделяемом обра-
 
   зе, т.е. в образе позиционно независимом, необходимо  опре-
 
   делять символ как:
 
                     символ+<базовый адрес>
 
 
        Следующий пример иллюстрирует правильное использование
 
   универсальных символов для исправления разделяемого изобра-
 
   жения.
 
 
        Пример.
 
 
           $MACRO CHAL1
 
 
 
 
 
                            - 67 -
 
                         00152-01 33 05
 
 
           $LINK/SHAREABLE CHAL1,X/OPTIONS
 
 
           UNIVERSAL=LBR$BENN
 
 
           $PATCH CHAL1
 
 
           PATCH VERSION 2.0 15 MAR SO
 
 
           %PATCH-I-NOLCL
 
 
           PATCH>EXAMINE LBR$BENN
 
 
           %PATCH-E-NSADDR
 
 
           PATCH> EVALUATE LBR$BENN
 
 
           00000050
 
 
           PATCH> EXAMINE/WORD 250
 
 
           00000250:  OFFC
 
 
           PATCH> EXAMINE/INSTRUCTION
 
 
           00000252:  BRW   000008EE
 
 
           PATCH> EXAMINE/INSTRUCTION #8EE
 
 
           000008EE: SUBL2 #08,SP
 
 
 
        В примере первая команда EXAMINE  безуспешно  пытается
 
   воспроизвести содержимое универсального  символа  LBR$BENN.
 
   Команда EVALUATE подтверждает, что LBR$BENN является  ячей-
 
   кой памяти 50. Поскольку разделяемый образ  является  пози-
 
   ционно независимым, необходимо  прибавить  значение  200  к
 
   ячейке 50 и значащее слово в результирующей ячейке  (ячейка
 
   250) будет воспроизведено; это значащее слово  представляет
 
 
                            - 68 -
 
                         00152-01 33 05
 
 
   точку ввода регистра защитной маски программы LBR$BENN. Для
 
   воспроизведения первой инструкции в  LBR$BENN  используется
 
   команда EXAMINE/INSTRUCTION. В данном случае воспроизведен-
 
   ная ответвляющая инструкция является переходом  к  действи-
 
   тельному старту LBR$BENN. Проверка исходной  точки  ответв-
 
   ляющей инструкции дает первую инструкцию в LBR$BENN.
 
 
 
        6.1.5. Символьные метки инструкций
 
 
 
        Символьные метки инструкций представляют собой  симво-
 
   лы, содержащие от 1 до 15 знаков  и  обладающие  следующими
 
   характеристиками :
 
 
        -они  должны  начинаться  буквой  (меткA  в  виде  10$
 
   недействителена для использования с PATCH);
 
 
        -они могут содержать  алфавитно-цифровые  знаки,  знак
 
   ($) и/или подчеркивания (_).
 
 
        Символьная метка инструкции позволяет связывать специ-
 
   фическое имя с конкретной ячейкой, не зная числового адреса
 
   ячейки. Подобная ситуация обычно возникает в следующих слу-
 
   чаях:
 
 
        1) серия инструкции вводится, заменяется или помещает-
 
   ся в существующий код (см. Разд.10);
 
 
        2) рATCH помещает новые инструкции в  текущую  область
 
   исправлений и генерирует ответвляющие инструкции к  области
 
   исправлений и  от  нее  для  поддержания  логического  хода
 
   выполнения программы (см. Разд.7);
 
 
 
 
 
                            - 69 -
 
                         00152-01 33 05
 
 
        3) при добавлении новых инструкций одна  из  них  ссы-
 
   лается на другую.
 
 
        Поскольку точное местоположение инструкции, на которую
 
   делается ссылка, неизвестно, можно использовать  символьную
 
   метку инструкции для отыскания инструкций и ячейки, в кото-
 
   рой она помещена.
 
 
        Пример.
 
 
           PATCH> INSERT/INSTRUCTION 35000
 
           OLD> 'TSTL R3'
 
           OLD> EXIT
 
           NEW> 'BEQL NONE'
 
           NEW> 'MOVL R4,R0'
 
           NEW> 'DIVL2 R0,R1'
 
           NEW> 'MULL2 R2,R1'
 
           NEW> 'NONE: RET'
 
           NEW> EXIT
 
 
        В данном  примере  группа  инструкций  вставляется  за
 
   ячейкой 350 посредством использования области  исправлений.
 
   Символьная метка  инструкции  NONE  используется  в  первой
 
   инструкции для  ссылки  на  пятую  инструкцию.  Метка  NONE
 
   используется потому, что точное местоположение  этих  инст-
 
   рукций неизвестно.
 
 
        Дополнительный эффект использования  символьных  меток
 
   инструкций состоит в том, что если один раз символьная мет-
 
   ка инструкции была связана с  ячейкой,  то  эта  метка  уже
 
   будет всегда ссылаться на эту ячейку, даже, если содержимое
 
   ячейки будет перемещено. Например, предположим,  что  прог-
 
 
 
                            - 70 -
 
                         00152-01 33 05
 
 
   рамма имеет следующий вид:
 
 
           .                 .
 
           .                 .
 
           .                 .
 
          500            TSTL  R3
 
          502    XX      BEQL  LBL3
 
          505    YY      CLRL  -(R6)
 
           .                .
 
           .                .
 
           .                .
 
 
 
          550             TSTL  R5
 
          552    LBL3:    MOVL  R2,R3
 
           .                 .
 
           .                 .
 
           .                 .
 
 
 
 
 
 
        В этой ситуации символьная метка инструкции LBL3  свя-
 
   зана с ячейкой 552 и предшествующая инструкция (BEQL  LBL3)
 
   ссылается на LBL3. В дальнейшем выясняется, что  инструкция
 
   TSTL R5 является ошибочной и производится следующее исправ-
 
   ление:
 
 
           PATCH> REPLACE/INSTRUCTION 550
 
           OLD> 'TSTL R5'
 
           OLD> EXIT
 
           NEW> 'CMPL R5,R6'
 
           OLD:     00000550:   TSTL R5
 
 
 
                            - 71 -
 
                         00152-01 33 05
 
 
           OLD:     MOVL R2,R3
 
           NEW:     00000550:    BRW 00007800
 
           NEW:     00000553:    NOP
 
           NEW:     00007800:    CMPL R5,R6
 
           NEW:     00007803:    MOVL R2,R3
 
           NEW:     00007806:    BRW 00000555
 
 
 
 
        в ходе операции замены происходит следующее:
 
 
        -инструкция CMPL  R5,R6  требует  больше  байтов,  чем
 
   инструкция TSTL R5, TAKим образом, исключается  возможность
 
   осуществления простой замены;
 
 
        -инструкция CMPL R5,R6 помещается  в  текущей  области
 
   исправления, а ответвление к области  исправления  заменяет
 
   инструкцию TSTL R5;
 
 
        -ответвляющая инструкция, необходимая для  направления
 
   логического хода выполнения к  области  исправления,  также
 
   требует больше байтов, чем то количество, которое  занимала
 
   инструкция TSTL R5.
 
 
        Инструкция, следующая за  инструкцией  TSTL  R5  также
 
   перемещается в область исправлений, чтобы высвободить место
 
   для ответвляющей инструкции. (эта  инструкция  MOVL  R2,R3,
 
   которая имеет символьную метку LBL3, связанную с  ее  ячей-
 
   кой);
 
 
        -ответвляющая инструкция вставляется вместо инструкции
 
   TSTL R5 и инструкция MOVL R2,R3 перемещается в область исп-
 
   равлений;
 
 
 
 
                            - 72 -
 
                         00152-01 33 05
 
 
        -инструкция NOP используется для заполнения ячеек,  не
 
   использованных ответвляющей инструкцией.
 
 
        В результате этого исправления символьный метка  инст-
 
   рукции LBL3 попрежнему ссылается  на  ячейку  552,  которая
 
   находится в середине ответвляющей инструкции.  Если  прове-
 
   рить LBL3, Tо будет воспроизведена следующая инструкция:
 
 
           PATCH> EXAMINE/INSTRUCTION LBL3
 
           LBL3:  MNEGD #01,#01
 
 
        для упорядочения создавшейся ситуации необходимо моди-
 
   фицировать все инструкции, которые ссылаются на LBL3.
 
 
        Пример.
 
 
           PATCH> REPLACE/INSTRUCTION XX
 
           OLD> 'BEQL LBL3'
 
           OLD> 'CLRL -(R6)
 
           OLD> EXIT
 
           NEW> 'BNEQ LBL2'
 
           NEW> 'BRW 7803'
 
           NEW> 'LBL2:CLRL -(R6)'
 
           NEW> EXIT
 
 
 
 
        В целях  корректирования  ссылки  на  инструкцию  MOVL
 
   R2,R3 и для поддержания логического хода  выполнения  прог-
 
   раммы инструкции ВЕQL LBL3 и CLRL -(R6) заменяются дополни-
 
   тельными инструкциями:
 
 
      BNEQ LBL2             ;ответвление не эквивалентно
 
                            ;метке
 
 
 
                            - 73 -
 
                         00152-01 33 05
 
 
      BRW 7803              ;безусловное ответвление к
 
                            ;ячейке 7803
 
 
        Безусловная ответвляющая инструкция для гарантии  дос-
 
   тижения ответвлением своего  пункта  назначения  использует
 
   замещение слова.
 
 
 
        6.1.6. Символы, определяемые командой DEFINE
 
 
 
        При работе с PATCH имеется  возможность  связать  сим-
 
   вольное имя с ячейкой  или  значением  путем  использования
 
   команды DEFINE. Эта команда позволяет дополнять  или  заме-
 
   нять существующие символы  в  образе  на  время  выполнения
 
   сеанса работы PATCH.
 
 
 
        6.2. Таблица символов PATCH
 
 
 
        В начале работы  программа  PATCH  составляет  таблицу
 
   символов, в которую помещаются глобальные символы,  локаль-
 
   ные символы, универсальные символы,  имена  модулей,  имена
 
   секций программ, имена программ, символы области  исправле-
 
   ний, символы, определяемые командой  DEFINE.  Глобальные  и
 
   локальные символы помещаются в таблицу символов, если  соб-
 
   людены правила введения этих символов. Если эти символы  не
 
   были введены, то после запуска PATCH воспроизводит одно или
 
   оба следующих информационных сообщения об ошибке:
 
 
        #PATCH-I-NOGBL,            -некоторые или все
 
                                   символы недоступны
 
 
        #PATCH-I-NOLCL,            -файл образов не
 
 
 
                            - 74 -
 
                         00152-01 33 05
 
 
                                   содержит локальных
 
                                   символов
 
 
        Подпрограма PATCH использует информацию,  содержащуюся
 
   в таблице символов, для перевода символов в значения и зна-
 
   чений в символы. Правила, по которым осуществляется перевод
 
   символов и значений, обсуждаются в подразделе 6.4.
 
 
        Программа PATCH не распознает  символьной  информации,
 
   которая не содержится в таблице символов.  Для  подтвержде-
 
   ния, что таблица символов содержит соответствующие  записи,
 
   применяется команда SHOW MODULE. По этой команде  воспроиз-
 
   водится статус текущей таблицы символов.
 
 
 
        6.3. Условные имена
 
 
 
        Некоторые символы могут быть многозначно определены  в
 
   данном файле образов.  Для  нахождения  конкретной  ячейки,
 
   которая определена многозначным символом,  необходимо  соз-
 
   дать однозначный маршрут, направляющий PATCH к  ячейке,  на
 
   которую делается ссылка.
 
 
        Условное имя представляет собой символьное  выражение,
 
   которое уникальным способом  идентифицирует  ячейку  внутри
 
   файла образов. Условное имя состоит из следующих элементов:
 
 
        SCOPE\симв.имя+OFFSET-VALUE
 
 
        где SCOPE идентифицирует  конкретный  модуль  в  файле
 
   образов, в котором PATCH отыскивает определенное символьное
 
   имя. Знак обратной дроби (бекслеш) (\)  является  требуемым
 
   ограничителем.
 
 
 
                            - 75 -
 
                         00152-01 33 05
 
 
        нет необходимости вставлять SCOPE в следующих случаях:
 
 
        1) когда все имена символов в  данном  файле  являются
 
   уникальными;
 
 
        2) когда область действия  уже  установлена  используя
 
   команду SET SCOPE по  всей  области,  на  которую  делается
 
   ссылка;
 
 
        3) когда символ, который выбирается, является глобаль-
 
   ным символом.
 
 
        Симв.имя идентифицирует  конкретную  ячейку  в  данном
 
   файле образов. Имена символов могут быть глобальными симво-
 
   лами, локальными символами,  или  символами,  определяемыми
 
   командой DEFINE.
 
 
        Имя символа является единственным  элементом,  который
 
   должен всегда задаваться для поиска данной ячейки.
 
 
        + или -OFFSET-VALUE определяет положительное или отри-
 
   цательное числовое значение при текущем  основании,  прила-
 
   гаемое к имени символа. Значение начального номера  исполь-
 
   зуется для ссылок на ячейки без меток.
 
 
        Пример иллюстрирует использование условного имени.
 
 
        Пример.
 
 
 
           PATCH> EXAMINE/INSTRUCTION REM-MOD1\CRM-STRT+1A
 
           REM-MOD1\CRM-STRT+1A:CLRQ R0
 
 
        В этом примере  команда  EXAMINE/INSTRUCTION  требует,
 
   чтобы содержимое ячейки CRM-STRT+1A  в  модуле,  называемом
 
 
 
                            - 76 -
 
                         00152-01 33 05
 
 
   REM-MOD1, воспроизведено как инструкция на языке  МАCRO  CM
 
   1700.
 
 
 
        6.4. Перевод символов и значений
 
 
 
        Программа PATCH придерживается специфической  последо-
 
   вательности операций для перевода адресного значения в сим-
 
   вол или символа в адресное значение.
 
 
 
        6.4.1. Перевод символов в адресные значения
 
 
 
        Перевод программой PATCH символьных записей в значения
 
   управляется  режимами  GLOBALS-NOGLOBALS  и  SCOPE-NOSCOPE.
 
   Следующие операции показывают процедуру, которую использует
 
   PATCH при осуществлении этого перевода:
 
 
        1) в начале PATCH сравнивает данную символьную  запись
 
   со всеми определенными пользователем символами  на  предмет
 
   точного совпадения;
 
 
        2) если операция 1 оказывается неудачной, PATCH прове-
 
   ряет статус установок режима GLOBALS-NOGLOBALS. Если  режим
 
   установлен на GLOBALS,то PATCH сравнивает вводимую символь-
 
   ную запись с символами в таблице символов, отыскивая точное
 
   совпадение. В данном случае, когда PATCH исследует  таблицу
 
   символов для согласования, она не придает содержимое записи
 
   "SCOPE" к символьной записи;
 
 
        3) если операция 2 оказывается  неудачной,  или  режим
 
   установлен не на GLOBALS, то PATCH проверяет статус  режима
 
   SCOPE-NOSCOPE. Если режим установлен  на  SCOPE,  то  PATCH
 
 
 
                            - 77 -
 
                         00152-01 33 05
 
 
   придает содержимое записи "SCOPE"  к  символьной  записи  и
 
   исследует таблицу символов на точное совпадение;
 
 
        4) если операция 3  оказывается  неудачной  или,  если
 
   режим установлен не на SCOPE, то ратсн  придает  содержимое
 
   области действия (основанное на текущем  РС)  к  символьной
 
   записи и исследует таблицу символов на точное совпадение;
 
 
        5) если операция 4 оказывается неудачной, PATCH  опять
 
   проверяет статус установок режима  GLOBALS/NOGLOBALS.  Если
 
   режим установлен на NOGLOBALS, то PATCH сравнивает символь-
 
   ную запись в том виде как она вводится с символами в табли-
 
   це символов, отыскивая полное совпадение. В  данном  случае
 
   при исследовании  таблицы  символов  PATCH  не  приставляет
 
   содержимое записи "SCOPE" к символьной записи. ( это  такая
 
   же процедура как и операция 2, только режим  установлен  на
 
   NOGLOBALS).
 
 
        Если перевод оказывается успешным, PATCH воспроизводит
 
   числовое значение выражения, в котором появляется  символь-
 
   ная  запись.  Если  перевод  оказывается  неудачным,  PATCH
 
   выдает следующее сообщение об  ошибке,  показывая,  что  не
 
   может перевести символьную запись в числовое значение:
 
 
           #PATCH-W-NOSYMBOL, NO SUCH SYMBOL 'SYMBOLIC-ENTRY'
 
 
 
        6.4.2. Перевод адресных значений в символы
 
 
 
        Перевод адресных значений в символьные записи в  прог-
 
   рамме PATCH управляется режимом SYMBOLS/NOSYMBOLS.  Следую-
 
   щие операции  показывают  процедуру,  которая  используется
 
   PATCH при осуществлении этого перевода:
 
 
                            - 78 -
 
                         00152-01 33 05
 
 
        1) в начале PATCH сравнивает адресное значение со все-
 
   ми определенными пользователем символами;
 
 
        2) если операция 1 оказывается неудачной, PATCH  срав-
 
   нивает  адресное  значение  с  определениями  глобальных  и
 
   локальных символов, отыскивая точное совпадение;
 
 
        3) если операция 2 оказывается неудачной, PATCH иссле-
 
   дует определения всех символов, отыскивая один, у  которого
 
   соответствующее адресное значение  ближе  всего  к  данному
 
   значению, но меньше него. PATCH отвергает символьное  опре-
 
   деление как ближайшее к адресному значению, когда  разность
 
   между символом и адресным значением больше или равна  шест-
 
   надцатиричной 100.
 
 
        Если перевод оказывается удачным, PATCH  воспроизводит
 
   числовое значение выражения, в котором появляется  адресное
 
   значение и сообщает адресное значение в форме соответствую-
 
   щего имени символа.  Если  перевод  оказывается  неудачным,
 
   PATCH все же  указывает  выражение,  в  котором  появляется
 
   адресное значение; в этом случае PATCH представляет  адрес-
 
   ное значение как числовой в форме выражения текущего  осно-
 
   вания.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
                            - 79 -
 
                         00152-01 33 05
 
 
                  7. Область исправлений PATCH
 
 
 
 
        Область исправлений представляет  собой  часть  памяти
 
   файла образов, расположенную  в  середине  или  в  конце  и
 
   используемую для накопления дополнительных  инструкций  или
 
   записей  данных.  Область  для  исправления  ошибок,  т.е.,
 
   область исправлений, создаваемая  PATCH,  всегда  присоеди-
 
   няется к концу файла  образов.  Определяемая  пользователем
 
   область исправлений может быть расположена  в  любой  части
 
   файла образов.
 
 
 
        7.1. Область для исправления ошибок
 
 
 
        Область для исправления ошибок является областью авто-
 
   матически создаваемой PATCH. В общем, область для исправле-
 
   ния ошибок является расширяемой. Она ограничена в  процессе
 
   работы PATCH имеющимся в распоряжении пространством на дис-
 
   ке  и  значением  параметра  счета  действительных  страниц
 
   SYSGEN в пределах времени выполнения цикла программы.
 
 
        При необходимости PATCH добавляет к области  для  исп-
 
   равления ошибок по одной странице.  Например,  если  встав-
 
   ляются дополнительные  инструкции  в  файл  образов,  PATCH
 
   добавляет следующую страницу области для  исправления  оши-
 
   бок, если существующая область для исправления ошибок слиш-
 
   ком мала для размещения новых инструкций.
 
 
        Обычно при исправлении файла образов исправления  оши-
 
   бок помещаются в области для исправления ошибок.  Однако  в
 
   некоторых случаях область для исправлений ошибок  не  может
 
 
 
                            - 80 -
 
                         00152-01 33 05
 
 
   использоваться для накопления исправлений. К таким  случаям
 
   относятся образы, создаваемые драйвером устройства и разде-
 
   ляемые образы, которые были связаны с другими образами.
 
 
        При исправлении образа драйвера устройства или  разде-
 
   ляемого образа, который связан с другими образами,  следует
 
   использовать определяемую пользователем  область  исправле-
 
   ний.
 
 
 
        7.2. Область исправлений PATCH, определяемая
 
             пользователем
 
 
 
        Определяемая пользователем область исправлений  предс-
 
   тавляет собой область, которая создается в  исходном  коде.
 
   Эта область иправлений расположена в границах  файла  обра-
 
   зов; PATCH не удлиняет файл образов для  помещения  в  него
 
   определяемой пользователем области исправлений. Кроме того,
 
   область, определяемая ползователем имеет фиксированные раз-
 
   меры; PATCH не может увеличить  размеры  этой  области  для
 
   ввода дополнительных исправлений.
 
 
        Определяемую пользователем область исправлений следует
 
   использовать для накопления дополнительного кода  при  исп-
 
   равлении образов драйвера устройства и разделяемых образов.
 
   В п. 7.2.1 поясняется почему в данных случаях использование
 
   области, определяемой пользователем, предпочтительней,  чем
 
   области для исправления ошибок. В  пунктах  7.2.2  -  7.2.4
 
   описывается, как создать определяемую пользователем область
 
   исправлений, доступ к ней и прекращение ее использования.
 
 
 
 
 
 
                            - 81 -
 
                         00152-01 33 05
 
 
        7.2.1. Когда использовать область исправлений,
 
               определяемую пользователем
 
 
 
        Как указывалось выше  при  исправлении  образа,  общие
 
   размеры которого не могут быть увеличены,  предпочтительней
 
   использовать определяемую пользователем  область  исправле-
 
   ний, чем область для исправления ошибок. Примерами  образов
 
   такого типа могут служить образы драйвера устройства и раз-
 
   деляемые образы.
 
 
        Образ драйвера устройства  содержит  в  начале  образа
 
   ячейку, которая  определяет  общую  длину  драйвера.  Когда
 
   драйвер устройства загружается, загрузчик  драйвера  следит
 
   за этой ячейкой для определения размеров  пространства  для
 
   размещения драйвера устройства. Тот факт, что  PATCH  удли-
 
   няет образ драйвера устройства  при  использовании  области
 
   для исправлений ошибок означает,  что  общая  длина  образа
 
   драйвера устройства увеличивается. Однако PATCH не  распоз-
 
   нает ячейку, которая содержит данные о длине драйвера  уст-
 
   ройства, а также не может  модифицировать  содержимое  этой
 
   ячейки, если удлиняется образ  драйвера  устройства.  Таким
 
   образом,  последовательное  воспроизведение  драйвера  уст-
 
   ройства, использующего область для исправления ошибок, тре-
 
   бует усечения области исправлений.
 
 
        Подобным образом, программа, связанная с  разделяемыми
 
   образами, должна содержать сведения на стадии компоновки, о
 
   размерах адресного пространства (в страницах),  занимаемого
 
   каждым разделяемым образом.  Когда  программа  компануется,
 
   остается действительное адресное пространство в файле обра-
 
   зов, в котором разделяемые образы  будут  помещаться.  Если
 
 
                            - 82 -
 
                         00152-01 33 05
 
 
   длина разделяемого образа  должна  расти  после  компоновки
 
   программы, во время эксплуатации,  то  площадь  исправлений
 
   будет перекрывать часть разделяемого образа.
 
 
 
        7.2.2. Создание      области      исправлений,
 
               определяемой пользователем
 
 
 
        Для создания области исправлений, определяемой пользо-
 
   вателем, необходимо в ходе ассемблирования или компилирова-
 
   ния выделить резервную  область.  Пример  иллюстрирует  как
 
   зарезервировать область исправлений в  программе  на  языке
 
   маCRO CM 1700.
 
 
        Пример.
 
 
   PATSIZE      =SIZE-IN-BYTES-OF-PATCH-AREA  (1)
 
   PATDESC::
 
       .LONG      PATSIZE     (2)
 
       .LONG      PATADR
 
   PATADR::
 
       .BLKB    PATSIZE      (3)
 
   где:
 
 
        (1) определяются размеры области исправлений;
 
 
        (2) создается дескриптор области исправлений,  который
 
   определяет размеры и первый свободный байт области  исправ-
 
   лений;
 
 
        (3) определяется символ для  представления  начального
 
   адреса области исправлений.
 
 
 
 
 
                            - 83 -
 
                         00152-01 33 05
 
 
        7.2.3. Доступ    к    области     исправлений,
 
               определяемой пользователем
 
 
 
        После создания определяемой пользователем области исп-
 
   равлений доступ к ней  осуществляется  вводом  команды  SET
 
   PATCH_AREA.
 
 
 
        7.2.4. Прекращение    использования    области
 
               исправлений, определяемой пользователем
 
 
 
        Для  прекращения  использования  области  исправлений,
 
   определяемой пользователем, подается команда  CANCEL  PATCH
 
   AREA. По этой команде текущая область исправлений  переклю-
 
   чается на область для исправления ошибок (см. разд. 10).
 
 
        Имеется также возможность переключения с одной области
 
   исправлений, определяемой пользователем, на другую подобную
 
   область вводом команды SET PATCH_AREA.
 
 
 
        7.3. Дескриптор области исправлений
 
 
 
        Дескриптор  области  исправлений  представляет   собой
 
   запись текущего статуса области исправлений.  Первое  слово
 
   содержит текущий размер (в неиспользованных байтах) области
 
   исправлений, а второе полное слово содержит  адрес  первого
 
   свободного байта области исправлений. Наблюдение за  стату-
 
   сом текущей области исправлений может осуществляться вводом
 
   команды SHOW PATCH_AREA.
 
 
        Пример.
 
 
 
 
                            - 84 -
 
                         00152-01 33 05
 
 
        PATCH> SHOW PATCH_AREA
 
 
        CURRENT PATCH AREA SIZE: 00000200
 
 
        CURRENT PATCH AREA ADDRESS: 00007800
 
 
        Вся область исправлений, независимо от того определяе-
 
   мая она пользователем или является областью для исправления
 
   ошибок, имеет связанный с ней дескриптор. При подаче коман-
 
   ды, влияющей на  область  исправлений,  дескриптор  области
 
   исправления обновляется для отражения в нем внесенных моди-
 
   фикаций.
 
 
 
        7.4. Символы области исправлений
 
 
 
        Можно использовать некоторые символы PATCH для  предс-
 
   тавления начал конкретных областей исправлений. Эти  симво-
 
   лы, занимающие диапазон от раа до PZZ называются  символами
 
   области исправлений. Эти символы использовать в  работе  не
 
   рекомендуется. Однако можно создавать  собственные  символы
 
   области исправлений, используя команду ALIGN.  Эта  команда
 
   позволяет  стыковать  символьные  имена  с  адресом  начала
 
   области для исправлений ошибок и адресами начал всех  опре-
 
   деляемых пользователем областей исправлений.
 
 
 
        7.5. Команды,  которые  влияют  на   область
 
             исправлений
 
 
 
        Командами, влияющими на область исправлений,  являются
 
   ALIGN,       INSERT/INSTRUCTION,       REPLACE/INSTRUCTION,
 
   DEPOSIT/PATCH_AREA.
 
 
 
                            - 85 -
 
                         00152-01 33 05
 
 
        7.5.1. Команда INSERT/INSTRUCTION
 
 
 
        При  использовании  команды  INSERT/INSTRUCTION  PATCH
 
   автоматически накапливает новые инструкции в  области  исп-
 
   равлений и генерирует безусловные  ответвляющие  инструкции
 
   для изменения маршрута логического хода выполнения програм-
 
   мы через область исправлений, а  затем  возврат  к  текущей
 
   инструкции.
 
 
        Случайно при введении одной или нескольких новых инст-
 
   рукций в код могут возникнуть следующие явления:
 
 
        -инструкция типа ответвляющей перемещается  в  текущую
 
   область исправлений;
 
 
        -область исправлений  находится  слишком  далеко,  что
 
   препятствует инструкции типа  ответвляющей  достичь  своего
 
   пункта назначения.
 
 
        Когда     возникают     эти      явления,      команда
 
   INSERT/INSTRUCTION  пересчитывает  относительное   смещение
 
   ответвляющей функции, чтобы обеспечить достижение ею своего
 
   пункта  назначения.  Например,  предположим,  что  введение
 
   новой инструкции вызывает необходимость переноса инструкции
 
   BRW 200 в область исправлений. Однако, когда инструкция BRW
 
   200 попадает в область исправлений, оказывается, что смеще-
 
   ние слов недостаточно велико для достижения ячейки  200.  В
 
   этом случае команда INSERT/INSTRUCTION пересчитывает смеще-
 
   ние слов, чтобы обеспечить  достижение  инструкцией  ячейки
 
   200.
 
 
        PATCH всегда завершает исправление ответвляющей  инст-
 
 
 
                            - 86 -
 
                         00152-01 33 05
 
 
   рукцией к текущему коду, даже, если  последней  инструкцией
 
   исправления является безусловная ответвляющая инструкция.
 
 
 
        7.5.2. Команда REPLACE/INSTRUCTION
 
 
 
        При использовании  команды  REPLACE/INSTRUCTION  PATCH
 
   автоматически налаживает новые инструкции в области исправ-
 
   лений только в том случае, если новые  инструкции  занимают
 
   больше байтов в памяти,  чем  замещаемые  инструкции.  Если
 
   используется  область  исправлений,  то  PATCH   генерирует
 
   ответвляющие инструкции к области исправлений и от нее  для
 
   поддержания конкретного хода выполнения программы.
 
 
        Так же как  и  в  случае  команды  INSERT/INSTRUCTION,
 
   команда REPLACE/INSTRUCTION может вызвать перевод  инструк-
 
   ции ответвляющего типа в область  исправлений.  Если  новая
 
   ячейка  инструкции  ответвляющего  типа  находится  слишком
 
   далеко, чтобы ответвление могло достичь своего пункта  наз-
 
   начения, команда REPLACE/INSTRUCTION пересчитывает  относи-
 
   тельное  размещение  инструкции  отвевляющего  типа,  чтобы
 
   обеспечить достижение ответвлением своего  пункта  назначе-
 
   ния.
 
 
        Когда заменяются числовые данные или данные в символь-
 
   ном коде, новые данные усекаются, если они превосходят дли-
 
   ну замещаемых данных (т.е., область исправлений не  исполь-
 
   зуется).
 
 
        PATCH всегда завершает исправление ответвляющей  инст-
 
   рукцией к текущему коду, даже, если  последней  инструкцией
 
   исправления является безусловная ответвляющая инструкция.
 
 
 
                            - 87 -
 
                         00152-01 33 05
 
 
        7.5.3. Команда DEPOSIT/PATCH_AREA
 
 
 
        Команда DEPOSIT/PATCH_AREA использует область  исправ-
 
   лений для накопления дополнительных инструкций или  данных;
 
   однако PATCH автоматически не генерирует ответвляющих инст-
 
   рукций к области исправлений и  от  нее,  когда  помещаются
 
   новые данные. Необходимо  вводить  ответвляющие  инструкции
 
   вручную. Пользователь также должен сам пересчитывать  отно-
 
   сительные размещения всех инструкций ответвляющего типа, на
 
   которые влияет введение новых данных или инструкций.
 
 
 
        7.5.4. Команда ALIGN
 
 
 
        Команда ALIGN используется для выделения  пространства
 
   для области исправления ошибок  в  файле  образов,  который
 
   ранее не подвергался исправлениям, или  определения  адреса
 
   первого свободного байта  в  текущей  области  исправлений.
 
   Более подробная информация о команде ALIGN дается  в  разд.
 
   10.
 
 
 
 
 
 
                            - 88 -
 
                         00152-01 33 05
 
 
               8. РЕЖИМЫ ВВОДА И ВОСПРОИЗВЕДЕНИЯ
 
 
 
 
        Режимы ввода и воспроизведения  определяют  как  PATCH
 
   интерпретирует команды и воспроизводит свои  выходные  дан-
 
   ные. Режимы ввода и воспроизведения сгуппированы  в  четыре
 
   функциональные категории: контекст, длина, основание и про-
 
   верка символов. Режимы группы "контекст" контролирует  воз-
 
   можность представления адресов в символьной форме,  возмож-
 
   ность проедставления инструкций в форме инструкций маCRO CM
 
   1700 и возможность представления данных  в  виде  текста  в
 
   символьном коде. Режимы группы "длина" определяют длину,  в
 
   которой представляются записи данных. Режимы группы  "осно-
 
   вание" определяют основание в виде выражения,  от  которого
 
   представляются адреса и записи данных. Режимы проверки сим-
 
   волов контролируют,как PATCH переводит символы в  адреса  и
 
   наоборот. В табл.9 определяется назначение каждого  режима.
 
   Подразделы 8.1 и 8.2, следующие за таблицей, описывают тех-
 
   нику установления конкретного  режима  и  правила,  которых
 
   следует придерживаться при специфицировании режимов ввода и
 
   воспроизведения.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
                            - 89 -
 
                         00152-01 33 05
 
 
                                                       Таблица 9
 
        Режимы ввода и воспроизведения в программе PATCH
 
      ----------------------------------------------------------
                  !          !                      !
        Категория ! Режим    !   Описание           !Значение по
                  !          !                      !  умолчанию
                  !          !                      !
      ----------------------------------------------------------
      Контекст    !INSTRUC-  ! Принимает или        !
                  ! TION     ! воспроизводит даные  ! NOINSTR-
                  !          ! как инструкции см 1700!  UCTION
                  !          ! если вводятся старые !
                  !          ! или новые данные и   !
                  !          ! установлен этот      !
                  !          ! режим, то инструкции !
                  !          ! должны быть заключены!
                  !          ! в апострофы или      !
                  !          ! кавычки              !
                  !          !                      !
                  !NOINS-    !  Препятствует вводу, !
                  ! TRUCTION !воспроизведению данных!
                  !          ! как инструкций см 1700!
                  !          ! это является начальн.!
                  !          ! условием умолчания.  !
                  ! ASCII    ! Принимает или        ! NOASCII
                  !          ! воспроизводит данные !
                  !          ! как  символьные      !
                  !          ! если вводятся        !
                  !          ! старые или новые     !
                  !          ! данные и установлен  !
                  !          ! этот режим, данные   !
                  !          ! должны быть заключены!
                  !          ! в апострофы или      !
                  !          !       кавычки        !
                  !          !                      !
                  ! NOASCII  ! Препятствует вводу   !
                  !          ! или воспроизведению  !
                  !          ! данных, как символьных!
                  !          ! знаков. Это является !
                  !          ! начальным условием   !
                  !          ! по умолчанию         !
                  !          !                      !
                  !NOSYMBOLS ! Препятствует         !SYMBOLS
                  !          ! воспроизведению      !
                  !          ! адресов в символьной !
                  !          ! форме                !
                  !          !                      !   SYMBOLS
                  !  SYMBOLS ! Воспроизводит        !
                  !          ! адреса в символьной  !
                  !          ! форме. Это является  !
                  !          ! начальным условием   !
                  !          ! по умолчанию         !
                  !          !                      !
      Длина       !  BYTE    ! Принимает или        !  LONG
                  !          ! воспроизводит байт   !
                  !          ! данных               !
                  !  WORD    ! Принимает или        !
 
 
                            - 90 -
 
                         00152-01 33 05
 
 
                                             продолжение табл. 9
      ----------------------------------------------------------
                  !          !                      !
        Категория ! Режим    !   Описание           !Значение по
                  !          !                      !  умолчанию
                  !          !                      !
      ----------------------------------------------------------
                  !          ! воспроизводит        !
                  !          ! слово данных         !
                  !LONG      ! Принимает или        !
                  !          ! воспроизводит        !
                  !          ! длину полного        !
                  !          ! слова. Это           !
                  !          ! начальное условие    !
                  !          ! по умолчанию         !
                  !          !                      !
      Основание   !OCTAL     ! Принимает или        !HEXIDECI-
                  !          ! воспроизводит        !  MAL
                  !          ! данные и адреса      !
                  !          ! в восьмеричных       !
                  !          ! выражениях           !
                  !DECIMAL   ! Принимает или        !
                  !          ! воспроизводит        !
                  !          ! данные и адреса      !
                  !          ! в десятичных         !
                  !          ! выражениях           !
                  !HEXADECI- ! Принимает или        !
                  !  MAL     ! воспроизводит        !
                  !          ! данные и адреса      !
                  !          ! в шестнадцатиричных  !
                  !          ! выражениях. Это      !
                  !          ! является начальным   !
                  !          ! условием по          !
                  !          ! умолчанию            !
                  !          !                      !
      Проверка    !NOSCOPE   ! Препятствуют         !NOGLOBALS
      символов    !          ! использованию        !
                  !          ! записи               !
                  !          ! в условном           !
                  !          ! имени и              !
                  !          ! возвращает к         !
                  !          ! "нулевой" области    !
                  !          ! действия             !
                  !  SCOPE   ! Позволяет            !
                  !          ! использовать запись  !
                  !          ! SCOPE в условном     !
                  !          ! имени. Это           !
                  !          ! является начальным   !
                  !          ! условием по          !
                  !          ! умолчанию.           !
                  ! GLOBALS  ! Позволяет            !
                  !          ! использовать         !
                  !          ! символьную запись    !
                  !          ! как первое условное  !
                  !          ! имя при              !
                  !          ! поиске адреса        !
                  !          !                      !
                  !NOGLOBALS ! Позволяет            !
                  !          ! использовать         !
 
 
                            - 91 -
 
                         00152-01 33 05
 
 
                                             продолжение табл. 9
      ----------------------------------------------------------
                  !          !                      !
        категория ! режим    !   описание           !значение по
                  !          !                      !  умолчанию
                  !          !                      !
      ----------------------------------------------------------
                  !          ! символьную           !
                  !          ! запись как последнее !
                  !          ! условное имя         !
                  !          ! при поиске адреса.   !
                  !          ! это является начальн.!
                  !          ! условием по умолчанию!
 
 
 
        8.1. Режимы и квалификаторы режимов
 
 
 
        Модификация  установок  режимов  может  осуществляться
 
   вводом команд SET MODE и CANCEL MODE или вводом  квалифика-
 
   тора альтернативного режима на командную строку.
 
 
        Примеры:
 
 
        1. PATCH>SET MODE INSTRUCTION
 
 
        PATCH>DELETE 400='MOVL (R6),(R5)'
 
 
        или
 
 
        2. PATCH>DELETE/INSTRUCTION 400='MOVL (R6),(R5)'
 
 
        Приведенные примеры почти  эквивалентны.  Единственная
 
   разница  состоит  в  том,  что  в  первом   примере   режим
 
   INSTRUCTION становится установкой по умолчанию, а во втором
 
   примере режим INSTRUCTION  является  временной  установкой,
 
   действующей только  на  данной  цепочке  команд.  Следующая
 
   цепочка команд действует с установками текущего режима.
 
 
        Для проверки состояния  текущих  режимов  используется
 
   команда SHOW MODE.
 
 
 
                            - 92 -
 
                         00152-01 33 05
 
 
        8.2. Установление    режимов     ввода     и
 
             воспроизведения
 
 
 
        В данном подразделе обсуждаются правила для  установки
 
   режимов ввода и воспроизведения. Режимы ввода и воспроизве-
 
   дения контролируют форматы исправлений. Например, для того,
 
   чтобы поместить инструкцию МАCRO CM 1700 необходимо,  чтобы
 
   был установлен режим INSTRUCTION, A для помещения текста  в
 
   кодах ASCII должен быть установлен режим ASCII.
 
 
 
        8.2.1. Режимы группы контекст
 
 
 
        Режимами группы контекст являются:
 
 
           INSTRUCTION        NOINSTRUCTION
 
           ASCII              NOASCII
 
           SYMBOLS            NOSYMBOLS
 
 
        Эти   режимы   действуют    как    выключатели    типа
 
   "вкл.-выкл.". Например,режим  INSTRUCTION  стремится  восп-
 
   роизвести содержимое одной или нескольких ячеек  как  инст-
 
   рукций MACRO CM 1700. Режим NOINSTRUCTION исключает возмож-
 
   ность воспроизведения содержимое одной или нескольких ячеек
 
   как инструкций MACRO CM 1700.
 
 
 
        8.2.1.1. Режимы INSTRUCTION/NOINSTRUCTION
 
 
 
        Режимы INSTRUCTION/NOINSTRUCTION контролируют  возмож-
 
   ности ввода и воспроизведения  данных  в  форме  инструкций
 
   МАCRO CM 1700.
 
 
 
 
                            - 93 -
 
                         00152-01 33 05
 
 
        Когда установлен режим  INSTRUCTION  PATCH  производит
 
   следующие действия:
 
 
        - принимает  и  воспроизводит  данные  как  инструкции
 
   MACRO CM 1700;
 
 
        - при приеме или воспризведении инструкций  игнорирует
 
   текущий режим длины. PATCH  увеличивает  текущий  адрес  по
 
   числу байтов, занимаемых инструкцией;
 
 
        - при использовании  инструкций  REPLACE,  INSERT  или
 
   DEPOSIT/PATCH_AREA  включает   автоматический   согласующий
 
   механизм, который понимает символьные инструкции  и  вводит
 
   их в указанные  ячейки.  Этот  согласующий  механизм  может
 
   включить перемещение некоторых инструкций в текущую область
 
   исправлений и введение ответвлений к ним,  а  также  замену
 
   неиспользованных байтов инструкциями NOP.
 
 
        Необходимо все  символьные  инструкции,  вводимые  как
 
   входные данные, заключить в кавычки или апострофы.
 
 
        Когда установлен режим NOINSTRUCTION, PATCH  принимает
 
   и воспроизводит данные в соответствии с установками текущих
 
   режимов основания, длины и ASCII/NOASCII.
 
 
 
        8.2.1.2. Режимы ASCII/NOASCII
 
 
 
        Режимы ASCII/NOASCII контролируют возможности введения
 
   и воспроизведения данных в символьном коде.
 
 
        Когда установлен режим  INSTRUCTION  PATCH  игнорирует
 
   установки режимов ASCII/NOASCII и принимает и воспроизводит
 
   данные как инструкции MACRO CM 1700.
 
 
                            - 94 -
 
                         00152-01 33 05
 
 
        Когда установлен режим  АSCII  и  NOINSTRUCTION  PATCH
 
   выполняет следующие операции:
 
 
        - требует, чтобы все данные символьные,  вводимые  как
 
   входные записи, были заключены в кавычки или апострофы.
 
 
        - воспроизводит сообщение  об  ошибке,  если  вводится
 
   последовательность символов, не заключенная в  кавычки  или
 
   апострофы;
 
 
        - усекает входную строку данных символьных,  если  эта
 
   цепочка превышает предел,  установленный  для  нее  текущим
 
   режимом длины. PATCH усекает входные строки удалением  лиш-
 
   них знаков справа; - воспроизводит выходные  строки  данных
 
   символьных в соответствии с текущим режимом длины.
 
 
        Пример.
 
 
        PATCH>EXAMINE/BYTE/ASCII 675
 
 
        00000675: I
 
 
        PATCH>EXAMINE/WORD/ASCII 675
 
 
        00000675: ID
 
 
        PATCH>EXAMINE/LONG/ASCII 675
 
 
        00000675: IDLE
 
 
        - игнорирует текущий режим основания  при  приеме  или
 
   воспроизведении данных.
 
 
        Когда  установлены  режимы  NOASCII  и  NOINSTRUCTION,
 
   PATCH принимает и воспроизводит  данные  в  соответствии  с
 
   установками текущих режимов основания и длины.
 
 
                            - 95 -
 
                         00152-01 33 05
 
 
        8.2.1.3. Режимы SYMBOLS/NOSYMBOLS
 
 
 
        Режимы  SYMBOLS/NOSYMBOLS   контролируют   возможности
 
   преимущественного воспроизведения адресов в форме  условных
 
   имен и символов в сравнении с числовыми адресами.
 
 
        Когда установлен режим SYMBOLS, PATCH  выполняет  сле-
 
   дующие операции:
 
 
        - воспроизводит все ячейки по соответствующим условным
 
   именами или символам;
 
 
        - принимает условные имена как входные  данные.  Когда
 
   установлен режим NOSYMBOLS, PATCH воспроизводит все  ячейки
 
   по их числовым адресам. Имеется возможность ввести условное
 
   имя как входной сигнал  в  PATCH,  HO  PATCH  воспроизведет
 
   адрес этой ячейки в виде ее числового адреса.
 
 
 
        8.2.2. Режимы длины
 
 
 
        Режимами, устанавливающими длину, являются BYTE,  WORD
 
   и LONG. Они указывают сколько байтов ( 1,2 или 4 ) в памяти
 
   имеется в распоряжении  для  накопления  заданного  отрезка
 
   данных. К режимам длины относятся следующие правила:
 
 
        - PATCH игнорирует текущий режим длины и принимает или
 
   воспроизводит инструкции полностью. ( это условие действует
 
   при режиме INSTRUCTION );
 
 
        - PATCH усекает позиции самых старших  битов  числовых
 
   данных, которые выходят за пределы, установленных  для  них
 
   текущим режимом длины. ( это условие действует при  режимах
 
 
 
                            - 96 -
 
                         00152-01 33 05
 
 
   NOINSTRUCTION и NOASCII ). Кроме того, PATCH выдает инфрма-
 
   ционное сообщение об ошибке.
 
 
        Пример.
 
 
        PATCH>DEPOSIT/NOINSTRUCTION/NOASCII/BYTE
 
 
        LOC> 200
 
 
        NEW> 12345643
 
 
        %PATCH-I-NUMTRUNC, NUMBER TRUNCATED
 
 
        NEW> EXIT
 
 
        %PATCH-I-NUMTRUNC, NUMBER TRUNCATED
 
 
        OLD: 00000200: 22
 
 
        NEW: 00000200: 43
 
 
        - устанавливает только  последний  режим  длины,  если
 
   вводятся противоречивые режимы длины на одну строку команд.
 
 
 
        8.2.3. Режимы основания
 
 
 
        Режимами, определяющими основание математических выра-
 
   жений, являются OCTAL, DECIMAL и HEXADECIMAL.  Они  опреде-
 
   ляют основание, при  котором  PATCH  переводит  записи  или
 
   воспроизводит числовые данные и адреса. К режимам основания
 
   относятся следующие правила:
 
 
        - PATCH игнорирует режим основания, когда  установлены
 
   режимы группы контекст;
 
 
 
 
 
                            - 97 -
 
                         00152-01 33 05
 
 
        - PATCH воспроизводит данные в соответствии с  текущим
 
   режимом длины;
 
 
        - PATCH устанавливает только последний  режим  основа-
 
   ния, если в одной командной строке введено несколько  режи-
 
   мов основания.
 
 
        Имеется  также  возможность  менять  режимы  основания
 
   определением оператора основания ( ^O,^D,^X,^B ).  Оператор
 
   основания управляет только вводом, который он сопровождает;
 
   он не имеет контроля над  основанием,  с  помощью  которого
 
   PATCH воспроизводит значение .
 
 
 
        8.2.4. Режимы проверки символов
 
 
 
        Режимами проверки символов являются:
 
 
           SCOPE                NOSCOPE
 
           GLOBALS              NOGLOBALS
 
 
        Подобно режимам группы контекст, режимы проверки  сим-
 
   волов действуют как выключатели  "вкл.-выкл.".  Эти  режимы
 
   контролируют, как PATCH Oсуществляет перевод символов.
 
 
 
        8.2.4.1. Режимы SCOPE/NOSCOPE
 
 
 
        Режимы SCOPE/NOSCOPE контролируют наличие приставки  "
 
   SCOPE " у символической записи, когда PATCH пытается  отыс-
 
   кать  числовой  адрес,  представляемый  этой  символической
 
   записью. Следует заметить, что PATCH придерживается опреде-
 
   ленной процедуры, выполняя переводы  символов  в  значения.
 
   Эта  процедура  основана  на  текущих  установках   режимов
 
 
                            - 98 -
 
                         00152-01 33 05
 
 
   SCOPE/NOSCOPE и GLOBALS/NOGLOBALS.
 
 
 
        8.2.4.2. Режимы GLOBALS/NOGLOBALS
 
 
 
        Режимы GLOBALS/NOGLOBALS подобно режимам SCOPE/NOSCOPE
 
   контролируют наличие приставки " SCOPE  "  у  символической
 
   записи,  когда  PATCH  пытается  отыскать  числовой  адрес,
 
   представленный символической записью. PATCH  придерживается
 
   определенной процедуры, выполняя переводы символов в значе-
 
   ния. Эта процедура основана на текущих  установках  режимов
 
   SCOPE/NOSCOPE и GLOBALS/NOGLOBALS.
 
 
 
 
                      9.ПРАВИЛА СИНТАКСА
 
 
 
 
 
        9.1. Запросы команд
 
 
 
        Все команды PATCH, кроме команды EXAMINE, выдают  зап-
 
   рос в случаях, когда  недостаточные  параметры  следуют  за
 
   именем команды. Например, команда DEPOSIT запрашивает ячей-
 
   ку и содержимое, которое должно помещаться  в  эту  ячейку,
 
   если эти параметры опущены:
 
 
        PATCH>DEPOSIT
 
 
        LOC>1363
 
 
        NEW>01
 
 
        Некоторые команды требуют знак "=". Когда  допускается
 
   запрос PATCH в отношении опущенных  параметров  в  подобных
 
 
 
                            - 99 -
 
                         00152-01 33 05
 
 
   командах, не следует использовать знак равенства.
 
 
        Некоторые команды периодически с повторениями запраши-
 
   вают данный параметр, если он опущен. В таких случаях  сле-
 
   дует ввести команду EXIT для прекращения запроса.  Типичной
 
   для этого правила является команда SET MODE:
 
 
        PATCH>SET MODE
 
 
        NEW>INSTRUCTION
 
 
        NEW>SYMBOLS
 
 
        NEW>NOGLOBALS
 
 
        NEW>EXIT
 
 
        Команда SET MODE продолжает требовать значения  режима
 
   до тех пор, пока не будет напечатана команда EXIT для  пол-
 
   ного прекращения последовательности команд.
 
 
        Можно ввести только один параметр в ответ на повторяю-
 
   щийся запрос . Например, если ввести:
 
 
        PATCH>SET MODE
 
 
        NEW>INSTRUCTION, NOASCII, BYTE
 
 
        то в ответ будет получено следующее сообщение об ошиб-
 
   ке:
 
 
        %PATCH-W-SYNTAX,  COMAND  SYNTAX  ERROR  AT  OR   NEAR
 
   'NOASCII,B'
 
 
        Команды CHECK ECO и CHECK NOT ECO принимают одно  зна-
 
   чение или один диапазон значений в ответ  на  повторяющийся
 
 
 
                            - 100 -
 
                         00152-01 33 05
 
 
   запрос.
 
 
 
        9.2. Перенос команд
 
 
 
        Имеется возможность переносить  команды  на  следующею
 
   строку   вводом   знака   переноса   "-"   как   последнего
 
   небланкового,некоментируемого знака в командной строке.
 
 
        Пример.
 
 
        PATCH>DEPOSIT-
 
 
        _>/BYTE-
 
 
        _>300-
 
 
        _>=54
 
 
   где знак _> обозначает продолжение командной строки.
 
 
        Если командная строка переносится более  одного  раза,
 
   необходимо переносить весь требуемый синтаксис.  В  примере
 
   знак равенства "=" должен быть определен.
 
 
 
        9.3. Введение цепочек  данных  в  символьном
 
             коде
 
 
 
        При введении цепочек данных  в  символьном  коде,  Oни
 
   должны быть заключены в кавычки ( " ) или апострофы ( '  ).
 
   Допуская, что кавычки или апострофы являются ограничителями
 
   цепочек, можно включить тот или иной ограничитель как часть
 
   входной цепочки.  Например,  если  требуется  ввести  текст
 
   I'LL, следует напечатать:
 
 
 
                            - 101 -
 
                         00152-01 33 05
 
 
        PATCH>DEPOSIT/ASCII 500 = "I'LL"
 
 
        Нельзя ограничить цепочку тем же ограничителем,  кото-
 
   рый включен как часть цепочки. Например, ошибочной командой
 
   будет:
 
 
        PATCH> DEPOSIT/ASCII 500 = 'I'LL'
 
 
        При вводе цепочек PATCH усекает их, если длина  превы-
 
   шает установленную для нее текущим режимом длину.
 
 
        Пример.
 
 
        PATCH>SET MODE ASCII,BYTE
 
 
        PATCH>DEPOSIT 600 ='ABCDEFG'
 
 
        %PATCH-I-STGTRUNC, STRING TRUNCATED
 
 
        %PATCH-I-NUMTRUNC, NUMBER TRUNCATED
 
 
        OLD: 000006000: ''
 
 
        NEW: 000000600: 'A'
 
 
        PATCH усекает цепочку удалением лишних знаков справа.
 
 
        Для введения цепочек данных в  символьном  коде  можно
 
   либо использовать квалификатор режима /ASCII, либо  устано-
 
   вить режим ASCII.
 
 
 
        9.4. Введение инструкций на языке  МАCRO  CM
 
             1700
 
 
 
        Правило введения цепочек данных в  символьном  коде  с
 
   использованием кавычек и апострофов  также  относится  и  к
 
 
                            - 102 -
 
                         00152-01 33 05
 
 
   введению инструкций на языке MACRO СМ 1700.  Вкратце,  ввод
 
   цепочки должен быть ограничен апострофами или кавычками, но
 
   не комбинацией того и другого,  и  ограничитель  не  должен
 
   появляться внутри цепочки.
 
 
        Кроме того, для введения инструкций MACRO СМ 1700 сле-
 
   дует либо использовать  квалификатор  режима  /INSTRUCTION,
 
   либо установить режим INSTRUCTION. Более подробную информа-
 
   цию см. 8.2.
 
 
        Для введения операторов со смещением  необходимо  при-
 
   бавлять к операндам B^,W^ или L^.например:
 
 
        PATCH>DEPOSIT 500 = B^4(R0)
 
 
 
        9.5. Введение числовых данных
 
 
 
        При введении числовых данных должны быть либо  опреде-
 
   лены квалификаторы режимов /NOINSTRUCTION и /NOASCII,  либо
 
   установлены соответствующие режимы. Кроме  того,не  следует
 
   заключать данные в кавычки или апострофы.
 
 
        Также имеется  возможность  введения  числовых  данных
 
   вперемежку с инструкциями  при  условии,  что  используются
 
   директивы ассемблера .BYTE, .WORD, .LONG.
 
 
        Пример. PATCH>DEPOSIT/PATCH_AREA/INSTRUCTION
 
 
        NEW>'TSTL R4'
 
 
        NEW>'BEOL LBL3'
 
 
        NEW>'MOVL LBL2,R0'
 
 
 
 
                            - 103 -
 
                         00152-01 33 05
 
 
        NEW>'LBL1: RET'
 
 
        NEW>'LBL2: .LONG 1,0'
 
 
        NEW>'LBL3: MOVL LBL2+4,R0'
 
 
        NEW>'BRB LBL1'
 
 
        Перед каждым  шестнадцатиричным  числом,  начинающимся
 
   буквой ( от а до F ), следует вставить 0. Например,  число-
 
   вая цепочка FFA вводится в следующем виде 0FFA.
 
 
 
        9.6. Ограничение ввода параметров
 
 
 
        Знак равенства "=" используется для отделения адресно-
 
   го выражения от записи данных или для отделения имени  сим-
 
   волов от значения.  Командами, требующими применения  знака
 
   "=", являются: DEFINE, DELETE, DEPOSIT, INSERT,  REPLACE  и
 
   VERIFY.
 
 
        Для разделения значений параметров в командах, которые
 
   могут содержать  много  произвольно  выбранных  параметров,
 
   используется запятая.
 
 
        Пример.
 
 
        PATCH>DEPOSIT/ASCII 500 = 'DOG','CAT',BIRD'
 
 
 
        9.7. Введение комментариев
 
 
 
        Для включения комментариев перед ними следует  ставить
 
   восклицательный знак. Когда PATCH считывает "!", она  игно-
 
   рирует всю последующею информацию в этой строке. Единствен-
 
 
 
                            - 104 -
 
                         00152-01 33 05
 
 
   ное ограничение для введения комментариев  состоит  в  том,
 
   что комментарий не может появляться в строке, где и цепочка
 
   команд, которая содержит перенос.
 
 
        Примеры:
 
 
        1. PATCH>REPLACE/INSTRUCTION 300 !замена инструкции
 
 
        OLD> 'PUSHAL L^11102457' !новой инструкцией
 
 
        OLD>EXIT !в ячейке 300:
 
 
        NEW>'PUSHAL L^11100245' !PUSHAL L^11100245
 
 
        2. PATCH>DEPOSIT/ASCII-
 
 
        _>1206-
 
 
        _>= 'CAR'-
 
 
        _>EXIT !этот коментарий полностью описывает
 
 
        !команду DEPOSIT
 
 
 
        9.8. Усечение ключевых слов
 
 
 
        Для упрощения процесса ввода  команд  можно  сокращать
 
   следующие ключевые слова:
 
 
        - имена команд;
 
 
        - режим, сопряжение и другие квалификаторы;
 
 
        - значения параметров для команд.
 
 
        PATCH не различает  разные  категории  ключевых  слов.
 
   Поэтому сокращение каждого ключевого слова должно быть уни-
 
 
                            - 105 -
 
                         00152-01 33 05
 
 
   кальным относительно всех остальных ключевых слов.
 
 
        Некоторые ключевые слова могут быть усечены до  неуни-
 
   кальных аббревиатур. Аббревиатуры этих ключевых слов  пере-
 
   числены в табл. 10.
 
 
 
 
 
 
 
 
 
                            - 106 -
 
                         00152-01 33 05
 
 
                                                   Tаблица 10
 
        Неуникальные аббревиатуры ключевых слов
 
 
      --------------------------------------------------------
                          !                        !
      Ключевое слово      !          Тип           ! Аббревиат
                          !                        !
      --------------------------------------------------------
                          !                        !
      DEPOSIT             !   Имя команды          !       D
                          !                        !
      EXAMINE             !   -------"-------"---- !        E
                          !                        !
      INSTRUCTION         !   Квалификатор режима  !        /I
                          !                        !
                          !   значение параметра   !        I
 
 
        В приложении перечисляются все команды PATCH с их ква-
 
   лификаторами и сокращенными форматами.
 
 
 
        9.9. Специальные        операторы        для
 
             арифметических выражений
 
 
 
        В данном подразделе описываются специальные операторы,
 
   которые PATCH распознает  в  арифметических  выражениях,  и
 
   приводятся примеры использования этих операторов. В табл.11
 
   дается краткое описание каждого оператора.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
                            - 107 -
 
                         00152-01 33 05
 
 
                                                   Таблица 11
 
      Специальные операторы для арифметических выражений
 
 
   -----------------------------------------------------------
            !                    !
   Оператор !      Имя           !    Функции
            !                    !
   -----------------------------------------------------------
            !                    !
       +    ! Оператор сложение  ! Знак плюс или оператор сло-
            !                    !
                                 !  жения
            !                    !
       -    ! Оператор вычитания ! Знак минус или оператор вы-
            !                    !
                                 ! читания
            !                    !
       *    ! Оператор умножения ! Оператор умножения
            !                    !
       /    ! Оператор деления   ! Оператор деления
            !                    !
       @    ! Оператор сдвига    ! Оператор арифметического
            !                    !
                                 ! сдвига
            !                    !
     <  >   ! Оператор приоритета! 1) Операторы приритета
            !                    !
                                 ! 2) Ограничители полей битов
            !                    !
                                 ! для команды
            !                    !
       ^    !  Оператор основания! Оператор основания для шест
            !                    !
                                 ! надцатиричной, десятичной,
            !                    !
                                 ! восмеричной или двоичной
            !                    !
                                 ! нотации
 
 
 
        9.9.1. Оператор сложения (+)
 
 
 
        Оператор сложения (+) используется как двоичный опера-
 
   тор для сложения двух аргументов. Оператор  сложения  может
 
   также использоватся для обозначения действительного  значе-
 
   ния аргумента. В последнем случае оператор  сложения  может
 
   быть опущен и на результатах это не скажется.
 
 
 
 
 
                            - 108 -
 
                         00152-01 33 05
 
 
        Пример показывает, как использовать оператор  сложения
 
   как двоичный оператор и знак плюс .
 
 
        Пример.
 
 
           PATCH> EVALUATE /HEXADECIMAL ^D10 + ^D43
 
           00000035
 
           PATCH> DEFINE X = -1
 
           PATCH> EVALUATE +X
 
           0FFFFFFFF
 
           PATCH> EVALUATE X
 
           0FFFFFFFF
 
 
        Результаты  возпроизводятся  как  выражение   текущего
 
   основания.
 
 
 
        9.9.2. Оператор вычитания (-)
 
 
 
        Оператор вычитания используется как двоичный  оператор
 
   для вычитания одного аргумента из другого. Оператор вычита-
 
   ния может также использоваться для обозначения  отрицатель-
 
   ного значения аргумента.
 
 
        Пример показывает, как использовать оператор вычитания
 
   как двоичный оператор и знак минус .
 
 
        Пример.
 
 
           PATCH> EVALUATE /HEXADECIMAL ^D58 - ^D14
 
           0000002C
 
           PATCH> DEFINE X = -1
 
           PATCH> EVALUATE -X
 
           00000001
 
 
                            - 109 -
 
                         00152-01 33 05
 
 
        Результаты  возпроизводятся  как  выражение   текущего
 
   основания.
 
 
 
        9.9.3. Оператор умножения (*)
 
 
 
        Оператор умножения  используется  для  умножения  двух
 
   аргументов.
 
 
        Пример.
 
 
           PATCH> EVALUATE 10 * 10
 
           00000100
 
 
        Результаты  возпроизводятся  как  выражение   текущего
 
   основания.
 
 
 
        9.9.4. Оператор деления (/)
 
 
 
        Оператор  деления  используется  для  деления  первого
 
   аргумента на второй  аргумент.  PATCH  усекает  частное  до
 
   целого значения.
 
 
        Пример.
 
 
           PATCH> EVALUATE ^D5 / ^D3
 
           00000001
 
 
        Результат возпроизводится как выражение текущего осно-
 
   вания. Следует иметь в виду, что PATCH не позволяет  делить
 
   на 0.
 
 
 
 
 
 
 
 
                            - 110 -
 
                         00152-01 33 05
 
 
        9.9.5. Оператор арифметического сдвига (@)
 
 
 
        Оператор арифметического сдвига (@)  используется  для
 
   сдвига первого аргумента на число битовых позиций,  опреде-
 
   ляемое следующим значением. Положительное значение означает
 
   сдвиг влево и потерю содержания знакового бита. Отрицатель-
 
   ное значение означает сдвиг вправо и распространяет  содер-
 
   жимое знакового бита на освобожденные битовые позиции.
 
 
        Операция сдвига является арифметической; полного  обо-
 
   рота не возникает , как  это  имеет  место  при  логическом
 
   сдвиге.
 
 
        Следующий  пример  иллюстрирует  использование   знака
 
   арифметического сдвига.
 
 
        Пример.
 
 
           00000035
 
           PATCH> EVALUATE 5FC0 @-2
 
           000017F0
 
           PATCH> EVALUATE ^D100 @2
 
           00000190
 
 
        Результаты  возпроизводятся  как  выражение   текущего
 
   основания.
 
 
 
        9.9.6. Оператор приоритета (<>)
 
 
 
        Нормально математические выражения  оцениваются  слева
 
   на право, за исключением тех случаев, когда команда  содер-
 
   жит угловые скобки или операторы приоритета  (<>).  В  этих
 
 
 
                            - 111 -
 
                         00152-01 33 05
 
 
   случаях выражение заключенное внутри операторов приоритета,
 
   оценивается в первую очередь. Одно выражение  может  содер-
 
   жать до 16 уровней гнездовых выражений. PATCH оценивает  их
 
   по порядку от внутренних к внешним.
 
 
        Пример.
 
 
           PATCH> EVALUATE /DECIMAL <5*<716-<5+89>>>
 
           3110
 
 
 
        9.9.7. Оператор основания ( ^ )
 
 
 
        Оператор основания используется для контроля интерпре-
 
   тации PATCH  числовых  цепочек.  Знак  основания  относится
 
   только к той записи, с которой он связан; PATCH воспроизво-
 
   дит результаты в виде выражений текущего основания.
 
 
        Операторами основания для языка МАCRO CM 1700  являют-
 
   ся:
 
 
           ^O                     восмеричное основание;
 
           ^D                     десятичное основание;
 
           ^X                     шестнадцатиричное основание;
 
           ^B                     двоичное основание.
 
 
        PATCH не допускает разрывов между знаком  основания  и
 
   числовой цепочкой.
 
 
        Пример показывает использование знака основания.
 
 
        Пример.
 
 
           PATCH> DEPOSIT/DECIMAL ^X300 = 15
 
           OLD:        00000768:        00000000
 
 
                            - 112 -
 
                         00152-01 33 05
 
 
           NEW:        00000768:        00000015
 
 
        В приведенном примере режим основания  установлен  для
 
   десятичного представления; однако ячейка, подлежащая  моди-
 
   фикации, представлена в шестнадцатиричном представлении.
 
 
 
        9.10. Специальные  операторы  для   адресации
 
              ячеек
 
 
 
        В настоящем подразделе описываются специальные  опера-
 
   торы, которые различает PATCH для локации адресов, и приво-
 
   дятся примеры использования этих операторов. В табл.12 при-
 
   ведены краткие описания каждого из операторов.
 
   
 
 
 
 
 
 
 
 
 
                            - 113 -
 
                         00152-01 33 05
 
 
                                                   Таблица 12
 
                   Спецальные операторы для адресации
 
 
   -----------------------------------------------------------
            !                     !
   Оператор ! Имя                 !        Функции
            !                     !
   -----------------------------------------------------------
            !                     !
     .      !Оператор текущей     !Воспроизводит последнюю
            !                     !
            !ячейки               !указанную ячейку, т. е.,
            !                     !
            !                     !текущую ячейку
            !                     !
            !Оператор предыду-    !Воспроизводит ячейку, кото-
            !                     !
   ^        !щей ячейки           !рая предшествует последней
            !                     !
            !                     !указанной ячейке; (вычитает
            !                     !
            !                     !из номера текущей ячейки
            !                     !
            !                     !число байтов, указанное ре-
            !                     !
            !                     !жимом длины )
            !                     !
   :        !Оператор дальности   !Оператор дальности для  ко-
            !                     !
            !                     !манд CHECK ECO, CHECK NOT
            !                     !
            !                     !ECO,EVALUATE и EXAMINE
            !                     !
            !Оператор обратной    !Воспроизводит либо содержа-
            !                     !
   \        !дроби (бекслэш)      !ние ячейки, указанной в от-
            !                     !
            !                     !ветвляющей инструкции, либо
            !                     !
            !                     !значение, заключенное в ад-
            !                     !
            !                     !рес, указанном в предыдущей
            !                     !
            !                     !команде
 
 
 
        9.10.1. Оператор текущей ячейки (.)
 
 
 
        Оператор текущей ячейки (.) используется  для  выборки
 
   адреса, указанного в самый последний момент.  Это  значение
 
   остается неизменным,  пока  не  появится  ссылка  на  новый
 
 
 
                            - 114 -
 
                         00152-01 33 05
 
 
   адрес. Оператор текущей ячейки может использоваться  вместо
 
   символьного или числового адреса в любой  команде,  которая
 
   запрашивает ячейку.
 
 
        Пример.
 
 
           PATCH> EXAMINE/INSTRUCTION 500
 
           00000500:        BBC RMS_DOC
 
           PATCH> DEPOSIT/INSTRUCTION . ='BBCC RMS_DOC'
 
 
 
        9.10.2. Оператор предыдущей ячейки (^)
 
 
 
        Оператор предыдущей ячейки (^) используется для выбор-
 
   ки адреса , предшествующего текущему адресу. Оператор  пре-
 
   дыдущей ячейки может использоваться вместо символьного  или
 
   числового адреса в любой команде, которая запрашивает ячей-
 
   ку. Использование этого оператора, когда  установлен  режим
 
   INSTRUCTION вызывает непредсказуемые результаты.
 
 
        Пример демонстрирует использование оператора  предыду-
 
   щей ячейки.
 
 
        Пример.
 
 
           PATCH> EXAMINE/ASCII/LONG 506
 
           00000506:        'RATH'
 
           PATCH> EXAMINE/ASCII/LONG ^
 
           00000502        'VERA'
 
 
        Следует заметить, что PATCH разделяет ячейки памяти  в
 
   соответствии с текущим режимом длины.
 
 
 
 
 
 
                            - 115 -
 
                         00152-01 33 05
 
 
        9.10.3. Оператор дальности (:)
 
 
 
        Оператор дальности (:) используется для указания даль-
 
   ности ячеек для команды EXAMINE или для указания  диапазона
 
   уровней есо в командах CHECK ECO и CHECK NOT ECO.
 
 
        Пример.
 
 
           PATCH> EXAMINE .:205
 
           00000203:        TSTL R4
 
           00000205:        BNEQ PAD$STRT
 
           PATCH> CHECK ECO 99:103
 
 
        Оператор дальности также может использоваться для раз-
 
   деления ограничителей битовых полей в команде EVALUATE.
 
 
        Пример.
 
 
           PATCH> EVALUATE 700<8:5>
 
 
 
        9.10.4. Оператор обратной дроби (бекслеш) (\)
 
 
 
        Оператор  обратной  дроби  (бекслеш)  используется   с
 
   командой EXAMINE/INSTRUCTION для воспроизведения содержания
 
   ячейки, указанной в ответвляющей инструкции.
 
 
        Пример.
 
 
           PATCH> EXAMINE/INSTRUCTION 750
 
           00000750:        BRW 7515
 
           PATCH> EXAMINE/INSTRUCTION \
 
           000007515: PUSHL L^NAME\BEGIN+12,L^NAME\BEGIN+23
 
 
 
 
 
                            - 116 -
 
                         00152-01 33 05
 
 
        При использовании с командой EXAMINE оператор обратной
 
   дроби воспроизводит значение, накопленное по адресу,  кото-
 
   рый воспроизводится в ответ на предыдущую команду EXAMINE.
 
 
        Пример.
 
 
           PATCH> EXAMINE 100
 
           00000100:        00000500
 
           PATCH> EXAMINE \
 
           00000500:        00000002
 
 
 
        9.11. Инструкции на языке  МАCRO  CM  1700  с
 
              одинаковыми кодами операций
 
 
 
        На языке МАCRO  CM  1700  различные  инструкции  могут
 
   генерировать одинаковый код  операции.  Например,  MOVAL  и
 
   MOVAF обе генерируют  шестнадцатиричный  код  операции  DE.
 
   Однако, PATCH  воспроизводит  только  одну  инструкцию  для
 
   любого из кодов операций, который может быть создан  много-
 
   численными инструкциями. Например, если используется  MOVAF
 
   в исходной програме, то PATCH воспроизводит MOVAL.
 
 
        В табл. 13  перечисляются  инструкции,  которые  имеют
 
   один и тот же  код  операции,  инструкции,  воспроизводимые
 
   PATCH, и сами коды операций.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
                            - 117 -
 
                         00152-01 33 05
 
 
                                           Таблица 13
 
         Инструкции воспроизводимые PATCH, из инструкций
 
       на языке МАCRO CM 1700 с эквивалентными кодами операций
 
 
      --------------------------------------------------------
                     !                             !
      Инструкции с   !Инструкции воспроизводимые   !  Код
                     !                             !
      одинаковыми    !PATCH                        !  операции
                     !                             !
      кодами операций!                             !
                     !                             !
      --------------------------------------------------------
                     !                             !
        BCC          ! BGEQ                        !     1E
                     !                             !
        BGEQU        !                             !
                     !                             !
                     !                             !
        BCS          ! BLSSU                       !     1F
                     !                             !
        BLSSU        !                             !
                     !                             !
                     !                             !
        BEQL         ! BEQL                        !     13
                     !                             !
        BEQLU        !                             !
                     !                             !
                     !                             !
        BNEQ         ! BNEQ                        !     12
                     !                             !
        BNEQU        !                             !
                     !                             !
                     !                             !
        CLRD         ! CLRQ                        !     7C
                     !                             !
        CLRG         !                             !
                     !                             !
        CLRQ         !                             !
                     !                             !
                     !                             !
                     !                             !
        CLRF         ! CLRL                        !     D4
                     !                             !
        CLRL         !                             !
                     !                             !
                     !                             !
                     !                             !
        CLRH         ! CLRO                        !      7CFD
                     !                             !
        CLRO         !                             !
 
 
 
 
 
 
 
                            - 118 -
 
                         00152-01 33 05
 
 
 
                                       продолжение табл. 13
 
      --------------------------------------------------------
                     !                             !
      Инструкции с   !Инструкции воспроизводимые   !  Код
                     !                             !
      одинаковыми    !PATCH                        !  операции
                     !                             !
      кодами операций!                             !
                     !                             !
      --------------------------------------------------------
                     !                             !
                     !                             !
                     !                             !
        MOVAD        !MOVAQ                        !     7E
                     !                             !
        MOVAG        !                             !
                     !                             !
        MOVAQ        !                             !
                     !                             !
                     !                             !
                     !                             !
        MOVAF        !MOVAL                        !     DE
                     !                             !
        MOVAL        !                             !
                     !                             !
                     !                             !
                     !                             !
        MOVAH        !MOVAO                        !     7EFD
                     !                             !
        MOVAO        !                             !
                     !                             !
                     !                             !
                     !                             !
        PUSHAD       !PUSHAQ                       !     7F
                     !                             !
        PUSHAG       !                             !
                     !                             !
        PUSHAQ       !                             !
                     !                             !
                     !                             !
                     !                             !
        PUSHAF       !PUSHAL                       !     DF
                     !                             !
        PUSHAL       !                             !
                     !                             !
                     !                             !
                     !                             !
        PUSHAH       !PUSHAO                       !     7FFD
                     !                             !
        PUSHAO       !                             !
 
 
 
 
 
 
 
 
 
                            - 119 -
 
                         00152-01 33 05
 
 
                  10. КОМАНДЫ ПРОГРАММЫ PATCH
 
 
 
 
        В настоящем  разделе  перечисляются  и  описываются  в
 
   алфавитном порядке команды программы PATCH. Обобщенное опи-
 
   сание команд PATCH см. В приложении.
 
 
 
        10.1. Команда ALIGN
 
 
 
        Описание:
 
 
        Команда ALIGN используется для определения пространст-
 
   ва для области исправления ошибок  по  умолчанию  в  файлах
 
   образов, которые ранее не  подвергались  исправлениям,  или
 
   для продвижения адреса начала текущей  области  исправлений
 
   до первого свободного байта, выравненного на требуемой гра-
 
   нице (байт, слово, двойное слово, квадрослово, страница ) и
 
   для присвоения символического имени этому адресу. Как толь-
 
   ко определено символическое имя, оно  может  использоваться
 
   вместо адреса, который оно обозначает.
 
 
        Когда подана команда ALIGN, никакая область  исправле-
 
   ний между адресом  старой  области  исправлений  и  адресом
 
   выравниваемой  области  исправлений   не   каталогизируется
 
   PATCH. Пользователь должен вести регистрацию  несоединенных
 
   участков области исправлений для их использования.
 
 
        После завершения выравнивания  обновляется  дескриптор
 
   области исправлений для  отражения  внесенных  модификаций.
 
   Если область исправлений уже до  этого  была  выравнена  на
 
   указаной границе, обновление не производится.  (более  под-
 
   робная информация о дескрипторе области исправлений  приве-
 
 
                            - 120 -
 
                         00152-01 33 05
 
 
   дена в подразделе 7.3).
 
 
        Для каждой команды ALIGN должен вводиться один и толь-
 
   ко один квалификатор.
 
 
        Формат:
 
 
             ALIGN/квалификатор симв._имя
 
 
   где квалификатор - квалификатор выравнивания.
 
 
        Симв._нименование - символьное имя.
 
 
        Подсказки:
 
 
        NAME> симв._имя
 
 
        Команда ALIGN указывает символы, содержащие от 1 до 15
 
   знаков. Они должны начинаться алфавитно -  цифровые  знаки,
 
   знак ($) и/или подчеркивания (_).
 
 
        Если указывается пользователем имя символа для адреса,
 
     который ранее уже имел символьное имя, то новейший символ
 
   имеет преимущество.
 
 
        Kвалификаторы выравнивания:
 
 
        /BYTE - определяет символ как  первый  свободный  байт
 
   текущей области исправлений. Если текущая область исправле-
 
   ний ранее не использовалась, то PATCH определяет местополо-
 
   жение первого блока области исправлений  ,  действующей  по
 
   умолчанию для исправления ошибок.
 
 
        /WORD - продвигает адрес начала текущей  области  исп-
 
   равлений до границы первого свободного слова.
 
 
 
 
                            - 121 -
 
                         00152-01 33 05
 
 
        /LONG - продвигает адрес начала текущей  области  исп-
 
   равлений до границы первого свободного двойного слова.
 
 
        /QUAD - продвигает адрес начала текущей  области  исп-
 
   равлений до границы первого свободного квадрослова.
 
 
        /PAGE - продвигает адрес начала текущей  области  исп-
 
   равлений до границы первой свободной страницы.
 
 
        Примеры:
 
 
   1.         PATCH> ALIGN/QUAD MOD_1
 
              OLD PATCH AREA SIZE:     000001E3
 
              OLD PATCH AREA ADDRESS:  0000081D
 
              NEW PATCH AREA SIZE:     000001E0
 
              NEW PATCH AREA ADDRESS:  00000820
 
              SYMBOL "MOD_1" DEFINED AS 00000820
 
 
        Команда ALIGN требует, чтобы адрес начала области исп-
 
   равлений был продвинут до границы первого свободного  квад-
 
   рослова в текущей области исправлений и чтобы символ  MOD_1
 
   был присвоен этому адресу. Выводится старый и новый статусы
 
   области исправлений.
 
 
   2.         PATCH> ALIGN/BYTE PATAREA
 
              OLD PATCH AREA SIZE:       00000000
 
              OLD PATCH AREA ADDRESS:    00000000
 
              NEW PATCH AREA SIZE:       00000200
 
              NEW PATCH AREA ADDRESS:    00001800
 
              SYMBOL "PATAREA" DEFINED AS 00001800
 
 
        Эта команда ALIGN выделяет  первый  блок  для  области
 
   исправления ошибок и присваивает символ PATAREA  адресу  ее
 
 
 
                            - 122 -
 
                         00152-01 33 05
 
 
   нового начала.
 
 
 
        10.2. Команда CANCEL MODE
 
 
 
        Описание:
 
 
        команда CANCEL MODE используется для контроля  синтак-
 
   сиса вводимых команд  и  воспроизводимых  программой  PATCH
 
   значений. Команда CANCEL MODE прекращает  текущий  режим  и
 
   восстанавливает начальное состояние, действующей по умолча-
 
   нию.
 
 
        Начальное состояние, действующее по  умолчанию,  вклю-
 
   чает:
 
 
        NOINSTRUCTION, NOASCII,  SYMBOLS,  HEXADECIMAL,  LONG,
 
   NOGLOBALS, SCOPE.
 
 
        Формат:
 
 
        CANCEL MODE
 
 
        Примеры:
 
 
   1.        PATCH> SHOW MODE
 
             MODES: NOSYMBOLS, INSTRUCTION, ASCII, SCOPE,
 
                    GLOBALS, DECIMAL, WORD
 
             PATCH> CANCEL MODE
 
             PATCH> SHOW MODE
 
             MODES: SYMBOLS, NOINSTRUCTION, NOASCII, SCOPE,
 
                    NOGLOBALS,HEXADECIMAL LONG
 
 
        Первая команда SHOW MODE воспроизводит статус текущего
 
   режима. Команда CANCEL MODE требует, чтобы были  восстанов-
 
 
                            - 123 -
 
                         00152-01 33 05
 
 
   лены установки начального режима, действующего  по  умолча-
 
   нию. Вторая команда SHOW MODE подтверждает,  что  установки
 
   начального режима восстановлены.
 
 
 
        10.3. Команда CANCEL MODULE
 
 
 
        Описание:
 
 
        команда  CANCEL  MODULE  используется  для  исключения
 
   информации о локальных символах из таблицы символов  PATCH;
 
   эта команда  не  исключает  глобальных  символов,  символов
 
   области исправлений,  универсальных  символов  и  символов,
 
   определяемых пользователем с помощью  команды  DEFINE.  Как
 
   только локальные символы модулей исключены из таблицы,  они
 
   уже не могут использоваться для ссылок на ячейки.
 
 
        Для исключения всей информации о локальных символах из
 
   таблицы символов применяется квалификатор /ALL.
 
 
        Если область действия совпадает с именем модуля,  ука-
 
   занного  командой  CANCEL  MODULE,  то  содержимое  области
 
   действия переносится на свободную цепочку (<NULL>).
 
 
        Формат:
 
 
        CANCEL MODULE/квалиф. Имя_модуля [,...]
 
 
   где
 
 
        квалиф. - квалификатор ( ALL );
 
 
        имя_модуля - имя модуля.
 
 
        Подсказки:
 
 
 
                            - 124 -
 
                         00152-01 33 05
 
 
        NAME> имя_модуля
 
 
        имя_модуля указывает имена модулей, локальные  символы
 
   которых подлежат исключению из таблицы символов.
 
 
        Не следует указывать имена модулей, если  используется
 
   квалификатор /ALL.
 
 
        Квалификатор /ALL исключает всю информацию о локальных
 
   символах из таблицы символов.
 
 
        Примеры:
 
 
   1.        PATCH> SHOW MODULE
 
             MODULE NAME       SYMBOLS      SIZE
 
             LOVAT             YES           180.
 
             TOTAL MODULES:    1.
 
             REMAINING SIZE:   EEA4.
 
             PATCH> CANCEL MODULE
 
             NAM> LOVAT
 
             NAM> EXIT
 
 
        Команда SHOW MODULE указывает, что локальные  символы,
 
   содержащиеся в модуле под названием LOVAT введены в таблицу
 
   символов. Команда CANCEL MODULE освобождает таблицу  симво-
 
   лов от локальных символов, содержащихся в модуле LOVAT.
 
 
   2.        PATCH> CANCEL MODULE/ALL
 
 
        Эта команда CANCEL MODULE исключает все имена  локаль-
 
   ных символов, введенные в таблицу символов.
 
 
   3.        PATCH> SET SCOPE CIRCLE
 
                  .
 
 
 
                            - 125 -
 
                         00152-01 33 05
 
 
                  .
 
                  .
 
             PATCH> CANCEL MODULE CIRCLE
 
             PATCH> SHOW SCOPE
 
             SCOPE:  <NULL>
 
 
        Команда SET SCOPE устанавливает модуль с именем CIRCLE
 
   как текущую область действия. Затем команда  CANCEL  MODULE
 
   исключает  все  локальные  символы,  заключенные  в  модуле
 
   CIRCLE , из таблицы символов и  одновременно  устанавливает
 
   область действия в свободной цепочке (<NULL>). Команда SHOW
 
   SCOPE подтверждает установку новой области действия.
 
 
 
        10.4. Команда CANCEL PATCH_AREA
 
 
 
        Описание:
 
 
        команда CANCEL PATCH_AREA  используется  для  переноса
 
   текущей области исправлений от  определяемой  пользователем
 
   области исправлений к области исправления ошибок, действую-
 
   щей при умолчании. Любая область исправления, которая  пот-
 
   ребуется в дальнейшем, будет браться из области исправления
 
   ошибок до тех пор пока не будет  выдана  следующая  команда
 
   SET PATCH_AREA.
 
 
        Команда CANCEL PATCH_AREA используется преимущественно
 
   когда выдается  команда  SET  PATCH_AREA  для  установления
 
   определяемой пользователем области исправлений  в  качестве
 
   текущей области  исправлений.  После  введения  необходимых
 
   исправлений  в  эту   область   вводится   команда   CANCEL
 
   PATCH_AREA для восстановления использования области исправ-
 
 
 
                            - 126 -
 
                         00152-01 33 05
 
 
   лений, действующей по умолчанию.
 
 
        Следует ввести команду CANCEL  PATCH_AREA  в  случаях,
 
   когда определена и используется определяемая  пользователем
 
   область исправлений, которая оказывается слишком  мала  для
 
   накопления необходимых исправлений. При  неудачной  попытке
 
   использовать команду CANCEL PATCH_AREA PATCH выдает сообще-
 
   ние об ошибке, указывающее, что PATCH не может ввести  исп-
 
   равление в область исправлений.
 
 
        Формат:
 
 
        CANCEL PATCH_AREA пример.
 
 
             PATCH> SET PATCH_AREA AREA1
 
                  .
 
                  .
 
                  .
 
             PATCH> CANCEL PATCH_AREA
 
 
        Команда  SET  PATCH_AREA  устанавливает   определяемую
 
   пользователем область исправлений AREA1 в качестве  текущей
 
   области исправлений. После помещения необходимых  данных  в
 
   аREA1, команда CANCEL PATCH_AREA выдается для  восстановле-
 
   ния использования области исправлеий, действующей по  умол-
 
   чанию.
 
 
 
        10.5. Команда CANCEL SCOPE
 
 
 
        Описание:
 
 
        команда CANCEL SCOPE используется для  отмены  текущей
 
   символьной области действия и перехода к свободной  цепочке
 
 
                            - 127 -
 
                         00152-01 33 05
 
 
   (<NULL>).
 
 
        Формат:
 
 
        CANCEL SCOPE
 
 
        Пример.
 
 
             PATCH> SHOW SCOPE
 
             SCOPE: MOD1
 
             PATCH> CANCEL SCOPE
 
             PATCH> SHOW SCOPE
 
             SCOPE: <NULL>
 
 
        Первая  команда  SHOW  SCOPE  указывает,  что  область
 
   действия установлена в пределах модуля под названием  MOD1.
 
   Команда CANCEL SCOPE отменяет установку области действия  и
 
   переводит ее на свободную цепочку (<NULL>). Вторая  команда
 
   SHOW SCOPE подтверждает, что содержимым установки  "<NULL>"
 
   является свободная цепочка.
 
 
 
        10.6. Команда CHECK ECO
 
 
 
        Описание:
 
 
        команда CHECK ECO используется для проверки, что  один
 
   или несколько уровней  ECO  установлены  и,  следовательно,
 
   исправления, представляемые этими уровнями ECO, вводятся  в
 
   файл образов. Следует помнить, что уровень ECO не  устанав-
 
   ливается до тех пор, пока исправление,  представляемое  им,
 
   не будет закончено вводом команды  UPDATE.  Например,  если
 
   определяется уровень ECO командой SET ECO, а  затем  немед-
 
   ленно проверяется установлен  ли  этот  уровень,  то  PATCH
 
 
                            - 128 -
 
                         00152-01 33 05
 
 
   отвечает сообщением об ошибке, указывающим, что уровень ECO
 
   не установлен.
 
 
        При вводе команды CHECK ECO нет необходимости перечис-
 
   лять все уровни ECO, которые были установлены для  конкрет-
 
   ного файла образов. Однако указание одного  или  нескольких
 
   уровней ECO, которые не были установлены, вызовет сообщение
 
   об ошибке.
 
 
        Формат:
 
 
        CHECK ECO ECO-уровень[:ECO-уровень][,...]
 
 
        подсказка:
 
 
        ECO> ECO-уровень
 
 
        ЕCO-уровень указывает один или несколько уровней  ECO,
 
   которые были установлены. Уровни ECO могут вводиться в фор-
 
   ме:
 
 
        -перечней, разделенных запятыми;
 
 
        -диапазонов, разделенных двоеточиями.
 
 
        Обе формы могут специфироваться в условиях  начального
 
   состояния на начальной командной строке. Однако в ответ  на
 
   затребование уровня  ECO  (подсказка  ECO)  может  вводится
 
   только один уровень ECO или один диапазон уровней ECO.
 
 
        Примеры:
 
 
   1.         PATCH> CHECK ECO   3:8,14,16
 
 
        Эта команда проверяет, что  исправления,  связанные  с
 
   уровнями ECO 3, 4, 5, 6, 7, 8, 14 и 16, должны вводиться  в
 
 
                            - 129 -
 
                         00152-01 33 05
 
 
   файл образов.
 
 
   2.         PATCH> CHECK ECO 12
 
              %PATCH-E-ECONOTSET, ECO LEVEL 12 NOT SET IN DM2:
 
              CHARINGTONJBIND_NOW.EXE;4
 
 
        Команда CHECK ECO проверяет, чтобы  исправление,  свя-
 
   занное с уровнем ECO 12, было подано на файл образов. Дисп-
 
   лей показывает, что уровень ECO 12 не установлен и  исправ-
 
   ление, которое он представляет, не подано на  файл  образов
 
   BIND.EXE.
 
 
 
        10.7. Команда CHECK NOT ECO
 
 
 
        Описание:
 
 
        команда CHECK NOT ECO используется для  проверки,  что
 
   один или несколько уровней ECO имеются в  распоряжении  для
 
   использования в конкретном файле образов.
 
 
        Команда CHECK NOT ECO является отрицательной по  отно-
 
   шению к команде CHECK ECO. Она также  может  использоваться
 
   для подтверждеия, что конкретное исправление подано на файл
 
   образов. Однако наиболее распространенным типовым использо-
 
   ванием команды CHECK NOT ECO  является  ее  применение  для
 
   подтверждения тех уровней ECO, которые имеются в распоряже-
 
   нии для использования в текущем файле образов.
 
 
        Формат:
 
 
        CHECK NOT ECO ECO_уровень[есо-уровень][,...]
 
 
        подсказка:
 
 
 
                            - 130 -
 
                         00152-01 33 05
 
 
        ECO> ECO-уровень
 
 
        ECO_уровень  указывает  неустановленные  уровни   ECO.
 
   Уровни ECO могут вводиться в двух формах:
 
 
        -перечени, разделенные запятыми;
 
 
        -диапозоны, разделенные двоеточиями.
 
 
        Обе формы могут вводиться командой начального  состоя-
 
   ния. Однако в ответ на подсказку  ECO>  может  быть  введен
 
   только один уровень ECO или один диапозон уровней есо.
 
 
        Примеры:
 
 
   1.        PATCH> CHECK NOT ECO   4:6,10
 
 
        Эта команда подтверждает, что уровни ECO 4, 5, 6 и  10
 
   имеются в распоряжении для использования.
 
 
   2.        PATCH> CHECK NOT ECO
 
             ECO> 17
 
             ECO> EXIT
 
             %PATCH-E-ECOSET, ECO LEVEL 17 ALREADY SET IN DM1:
 
             [REAVER]MYFILE,EXE;7
 
 
        В ответ на команду CHECK NOT ECO PATCH указывает,  что
 
   уровень ECO 17 уже используется в файле образов MYFILE.EXE
 
 
 
        10.8. Команда CREATE
 
 
 
        Описание:
 
 
        команда CREATE  используется  для  создания  командной
 
   процедуры, которая содержит все команды  PATCH,  последова-
 
 
                            - 131 -
 
                         00152-01 33 05
 
 
   тельно введенные после команды CREATE.
 
 
        Командные процедуры облегчают исправление многочислен-
 
   ных копий одного и того же файла  образов.  Существуют  два
 
   пути создания командных процедур. Один путь состоит в пода-
 
   че команды CREATE при запуске PATCH. Все последующие  необ-
 
   ходимые команды поступают к файлу образов и записываются  в
 
   командной процедуре. Второй путь  состоит  в  использовании
 
   редакторов текстов. Этот способ обсуждается в п. 5.4.2.
 
 
        Когда для создания  командной  процедуры  используется
 
   команда CREATE, PATCH автоматически вводит в качестве  пер-
 
   вой записи в командной процедуре имя файла образов, в кото-
 
   рый  будут  вноситься  исправления.  Все  символьные  имена
 
   преобразуются в абсолютные величины, а все имена  команд  и
 
   квалификаторы усекаются .
 
 
        Можно подавать только одну команду  CREATE  в  течение
 
   сеанса работы PATCH. Для создания другой командной процеду-
 
   ры необходимо закрыть входной файл образов, а  затем  снова
 
   откыть его.
 
 
        Для обработки исправлений,  содержащихся  в  командной
 
   процедуре необходимо выдать следующую команду DCL:
 
 
        $ PATCH @спецификация файла
 
 
        В приведенной выше цепочке команд выражение  "специфи-
 
   кация файла" представляет спецификацию командной процедуры,
 
   содержащей исправления.
 
 
        В разделе 4 обсуждаются различные  технические  приемы
 
   создания командных процедур; в разделе  5  обсуждаются  как
 
 
 
                            - 132 -
 
                         00152-01 33 05
 
 
   заменить командные процедуры на обработку с помощью PATCH.
 
 
        Формат:
 
 
        CREATE [спец.файла]
 
 
        где  спец.файла  представляет  спецификацию  командной
 
   процедуры. Синтаксис состоит в следующем:
 
 
        устройство:[каталог]имя_файла.тип;версия
 
 
        Можно опустить все или некоторые параметры в  специфи-
 
   кации файла командной процедуры. Для  опущенных  параметров
 
   PATCH использует значения, действующие по умолчанию:
 
 
        устройство:[каталог] - устройство и  каталог  текущего
 
   процесса.
 
 
        Имя_файла - имя входного файла образов.
 
 
        Тип - COM.
 
 
        Версия - на 1 больше, чем найвысшая  версия  командной
 
   процедуры.
 
 
        Если командная  процедура  накапливается  в  каталоге,
 
   отличного от того, который содержит входной файл образов, к
 
   которому относится командная процедура, то необходимо уста-
 
   навливать режим начального состояния, связанный  с  катало-
 
   гом, где находится входной файл образов,  перед  обработкой
 
   командной процедуры.
 
 
        Пример.
 
 
           $ PATCH AVERAGE
 
           PATCH VERSION 2.0 15 MAR 80
 
 
                            - 133 -
 
                         00152-01 33 05
 
 
           PATCH> CREATE PAT2
 
        PATCH> SET ECO 1
 
        PATCH> SET MODE NOSYMBOLS
 
        PATCH> EXAMINE 600
 
        00000600:     12345678
 
        PATCH> DELETE 600 = 12345678
 
        OLD:     00000600:     12345678
 
        NEW:     00000600:     00000000
 
        PATCH> UPDATE
 
        %PATCH-I-WRTFIL, UPDATING IMAGE FILE DMA2:
 
                       [BRADLEY]AVERAGE.EXE;6
 
        PATCH> EXIT
 
        $ SET DEFAULT [NIMROD]
 
        $ SHOW DEFAULT
 
        DMA2:[NIMROD]
 
        $ PATCH @[BRADLEY]PAT2
 
 
        В командной процедуре PATCH включены команды для  исп-
 
   равления образа  AVERAGE.EXE,  в  каталоге  DMA2:[BRADLEY].
 
   Команда CREATE  создает  командную  процедуру  PAT2.COM,  в
 
   которой собраны все последовательные команды.
 
 
        После прекращения сеанса работы PATCH, каталог, дейст-
 
   вовавшая по умолчанию, устанавливается на  DMA2:[NIMROD]  и
 
   исправления командной процедуры PAT2.COM подаются  на  файл
 
   образов [NIMROD]AVERAGE.EXE.
 
 
 
        10.9. Команда DEFINE
 
 
 
        Описание:
 
 
 
 
                            - 134 -
 
                         00152-01 33 05
 
 
        команда DEFINE используется для приравнивания символь-
 
   ного имени специфическому значению и для помещения символь-
 
   ного имени в таблицу символов.  После  выполнения  операции
 
   присвоения можно указывать символьное имя вместо  величины,
 
   которую она обозначает, в течение сеанса  работы  PATCH.  В
 
   конце сеанса работы PATCH  эти  определенные  пользователем
 
   символы вычеркиваются из таблицы символов.
 
 
        Когда используется команда DEFINE  для  создания  сим-
 
   вольных имен, PATCH всегда исследует таблицу  символов  для
 
   отыскания этих символьных имен прежде, чем перевести символ
 
   в значение.
 
 
        Одному значению может быть  присвоено  несколько  сим-
 
   вольных имен. Каждое символьное  имя  заносится  в  таблицу
 
   символов и может последовательно использоваться для  ссылок
 
   на значение, которое оно обозначает.
 
 
        Имеется возможность переопределить символьное имя  для
 
   присвоения нового значения. После этого при указании  этого
 
   символьного имени воспроизводится самая последняя величина,
 
   которую данный символ обозначает.
 
 
        На применение команды DEFINE накладываются два ограни-
 
   чения:
 
 
        - нельзя приравнивать символьное имя условному имени;
 
 
        - нельзя   использовать   ни   квалификаторы   режимов
 
   /INSTRUCTION или /ASCII, ни режимы  INSTRUCTION  или  ASCII
 
   при приравнивании символьного имени значению.
 
 
        Формат:                                         DEFINE
 
 
 
                            - 135 -
 
                         00152-01 33 05
 
 
   симв.имя.=значение[симв.имя.=значение,...]
 
 
        где симв. имя указывает символы, содержащие от 1 до 15
 
   знаков, определяемые  пользователем,  которые  должны  быть
 
   связаны с специфическим значением.  Символьное  имя  должно
 
   начинаться буквой и может содержать алфавитно-цифровые зна-
 
   ки, знаки ($) и/или подчеркивания (_).
 
 
        Символьное имя не может быть условным именем.
 
 
        Значение специфицирует числовой адрес  или  символьное
 
   выражение, которому должно быть присвоено специфицированное
 
   символьное имя.
 
 
        Подсказки:
 
 
        NAME> симв._имя
 
 
        VAL> значение
 
 
        Следует заметить, что если вводится символьное имя  на
 
   начальную строку командной цепочки, то необходимо ввести  и
 
   значение на эту строку.
 
 
        Примеры:
 
 
   1.   PATCH> DEFINE SWEDISH = CAR\VOLVO+144
 
        SYMBOL 'SWEDISH' DEFINED AS CAR\VOLVO+144
 
        PATCH> EXAMINE SWEDISH
 
 
        Команда DEFINE создает  символьное  имя  для  значения
 
   CAR\VOLVO+144. Последующая команда EXAMINE  требует,  чтобы
 
   содержимое  CAR\VOLVO+144   использовало   символьное   имя
 
   SWEDISH.
 
 
 
 
                            - 136 -
 
                         00152-01 33 05
 
 
   2.   PATCH> DEFINE
 
        NAM> SECOND-CHOICE
 
        VAL> 406
 
        NAM> EXIT
 
        SYMBOL 'SECOND-CHOICE' REDEFINED FROM 408 TO 406
 
 
        Команда DEFINE переводит символ SECOND-CHOICE со  зна-
 
   чения 408 на значение 406. Реакция на команду DEFINE  пока-
 
   зывает этот перевод.
 
 
 
        10.10. Команда DELETE
 
 
 
        Описание:
 
 
        команда DELETE используется для вычеркивания  инструк-
 
   ции или части данных из одной ячейки или нескольких  сосед-
 
   них ячеек в соответствии с текущим режимом.
 
 
        При  использовании  команды  DELETE  для  вычеркивания
 
   инструкций они заменяются инструкциями NOP. При использова-
 
   нии команды DELETE для вычеркивания  текстов  в  символьном
 
   коде и числовых данных эти данные заменяются нулями.
 
 
        Формат: DELETE/квал. Ячейка = текущее содержимое
 
 
        где квал. - один из квалификаторов режимов:
 
 
   квалификаторы режимов           по умолчанию
 
   /BYTE
 
   /WORD
 
   /LONG                           /LONG
 
 
 
   /OCTAL
 
 
                            - 137 -
 
                         00152-01 33 05
 
 
   /DECIMAL
 
   /HEXADECIMAL                     /HEXADECIMAL
 
 
 
   /[NO]ASCII                       /NOASCII
 
   /[NO]INSTRUKCION                 /NOINSTRUKCION
 
   /[NO]SYMBOL                      /SYMBOL
 
 
 
   /[NO]GLOBALS                     /NOGLOBALS
 
   /[NO]SCOPE                       /SCOPE
 
 
        Ячейка указывает либо одну ячейку, содержимое  которой
 
   должно быть вычеркнуто, либо  начальные  адреса  последова-
 
   тельности ячеек, содержимое которых подлежит вычеркиванию.
 
 
        Текущее содержимое указывает одну или несколько  запи-
 
   сей или инструкций,  подлежащих  вычеркиванию.  Указываемые
 
   данные или инструкции должны быть  действительным  содержи-
 
   мым.
 
 
        Не следует  указывать  противоречивые  типы  данных  в
 
   одной команде.
 
 
        Подсказки:
 
 
        LOC> ячейка
 
 
        OLD> текущее содержимое
 
 
        Квалификаторы режимов:
 
 
   /BYTE
 
   /WORD
 
   /LONG
 
 
 
 
                            - 138 -
 
                         00152-01 33 05
 
 
        определяют длину вычеркивания данных в байтах,  словах
 
   и двойных словах.  Квалификаторы  режимов  длины  относятся
 
   только к символьным и числовым  данным.  Когда  указывается
 
   инструкция, команда DELETE  игнорирует  установки  текущего
 
   режима длины и вычеркивает полностью всю информацию.
 
 
        Начальное состояние определяется квалификатором /LONG.
 
 
   /OCTAL
 
   /DECIMAL
 
   /HEXADECIMAL
 
 
        определяют основание, при котором действительные адре-
 
   са и числовые данные  интерпретируются  и  воспроизводятся.
 
   Квалификаторы режимов основания  не  влияют  на  символьные
 
   адреса, инструкции и данные в символьном коде.
 
 
        Начальное   состояние   определяется    квалификатором
 
   /HEXADECIMAL.
 
 
   /ASCII
 
   /NOASCII
 
 
        контролируют  интерпретируются  и  воспроизводятся  ли
 
   данные, подлежащие вычеркиванию, как  данные  в  символьном
 
   коде.
 
 
        При установлении квалификатора /ASCII необходимо  зак-
 
   лючать данные в кавычки или апострофы.  Установка  текущего
 
   основания не влияет на данные символьные, подлежащие вычер-
 
   киванию; однако по команде DELETE  усекаются  данные,  если
 
   они превышают длину, установленную для них текущим  режимом
 
   длины.
 
 
 
                            - 139 -
 
                         00152-01 33 05
 
 
        Начальное   состояние   определяется    квалификатором
 
   /NOASCII.
 
 
   /INSTRUCTION
 
   /NOINSTRUCTION
 
 
        контролируют  интерпретируются  и  воспроизводятся  ли
 
   данные, подлежащие вычеркиванию, как  инструкции  МАCRO  CM
 
   1700.
 
 
        При установлении квалификатора /INSTRUCTION необходимо
 
   заключать инструкцию в кавычки или  апострофа.  Ни  текущий
 
   режим основания, ни текущий режим длины не влияют на  инст-
 
   рукцию, подлежащую вычеркиванию.
 
 
        Начальное   состояние   определяется    квалификатором
 
   /NOINSTRUCTION.
 
 
   /SYMBOLS
 
   /NOSYMBOLS
 
 
        контролируют, чтобы ячейки воспроизводились как услов-
 
   ные имена или символы, а не как числовые адреса.
 
 
        Начальным состоянием является квалификатор /SYMBOLS.
 
 
   /GLOBALS
 
   /NOGLOBALS
 
 
        контролируют используется  ли  символьная  запись  как
 
   первое или последнее условное имя в цепочке поиска.
 
 
        Начальным состоянием по умолчанию является /NOGLOBALS.
 
 
   /SCOPE
 
 
 
                            - 140 -
 
                         00152-01 33 05
 
 
   /NOSCOPE
 
 
        контролируют  используется  ли  приставка  'SCOPE'   к
 
   условному имени для отыскания указанной ячейки.
 
 
        Начальным состоянием по умолчанию является /SCOPE.
 
 
        Примеры:
 
 
   1.   PATCH> DELETE/INSTRUCTION 2112 = 'CMPB (R0),(R5)'
 
        OLD: 00002112: CMPB (R0),(R5)
 
        NEW: 00002112: NOP
 
        NEW: 00002113: NOP
 
        NEW: 00002114: NOP
 
 
        Команда  DELETE  заменяет  инструкцию  CMPB  (R0),(R5)
 
   инструкциями NOP.
 
 
   2.   PATCH> DELETE/SYMBOLS
 
        LOC> 7A6
 
        OLD> 0E6ADDE39
 
        OLD> EXIT
 
        OLD: OTS$LINKAGE\OTS$LINKAGE+7C    0E6ADDE39
 
        NEW: OTS$LINKAGE\OTS$LINKAGE+7C    000000000
 
 
        Команда DELETE вычеркивает содержимое из  ячейки  7а6.
 
   Благодаря тому, что установлен квалификатор /SYMBOLS, ячей-
 
   ка 7а6 обозначается символически.
 
 
 
        10.11. Команда DEPOSIT
 
 
 
        Описание:
 
 
 
 
 
                            - 141 -
 
                         00152-01 33 05
 
 
        команда DEPOSIT используется для помещения новых  дан-
 
   ных или инструкций в одну или несколько соседних ячеек.
 
 
        Помещение данных или инструкций:
 
 
        команда DEPOSIT позволяет заменить  содержимое  ячейки
 
   или несколько соседних ячеек  в  соответствии  с  условиями
 
   текущего режима. Команда DEPOSIT не  требует  подтверждения
 
   текущего содержания перед заменой этого  содержания  новыми
 
   данными или инструкциями (т.е., эта  команда  предполагает,
 
   что пользователь знает, что делает). В случаях, когда необ-
 
   ходимо убедиться, что  данные  или  инструкции,  подлежащие
 
   переписыванию,  действительнло  те,  используется   команда
 
   REPLACE.
 
 
        Когда добавляются инструкции  к  файлу  образов  проще
 
   использовать команду INSERT. Эта команда осуществляет авто-
 
   матическое ответвление к области исправлений и от нее.
 
 
        Помещение данных или инструкций в область исправлений:
 
 
        при добавлении  квалификатора  /PATCH_AREA  к  команде
 
   DEPOSIT указанные данные или инструкции помещаются в  теку-
 
   щую область исправлений. Ячейка, которая для этого отводит-
 
   ся, должна быть первым свободным байтом в области исправле-
 
   ний. Для определения первого  свободного  байта  в  области
 
   исправлений подается команда SHOW  PATCH_AREA  или  команда
 
   ALIGN/BYTE. После помещения данных PATCH обновляет дескрип-
 
   тор области исправлений для  регистрации  в  нем  внесенных
 
   изменений.
 
 
        В отличие от команд INSERT,  REPLACE  команда  DEPOSIT
 
   PATCH_AREA  требует  помещения  ответвляющих  инструкций  в
 
 
                            - 142 -
 
                         00152-01 33 05
 
 
   соответствующие ячейки  для  поддержания  логического  хода
 
   выполнения программы с использованием области  исправлений.
 
   Ответвляющие инструкции подаются в область исправлений и от
 
   нее.
 
 
        Более полная информация об использовании области  исп-
 
   равлений содержится в разд.7.
 
 
        Формат:
 
 
   DEPOSIT/квалиф.   Ячейка=новое содержимое[,...]
 
 
        где квалиф. - один или несколько из возможных  квалиф-
 
   каторов режима:
 
 
       квалификаторы режимов    квалификаторы по умолчанию
 
       /BYTE
 
       /WORD                    /LONG
 
       /LONG
 
 
 
       /OCTAL
 
       /DECIMAL                 /HEXADECIMAL
 
       /HEXADECIMAL
 
 
 
       /[NO]ASCII               /NOASCII
 
       /[NO]INSTRUCTION         /NOINSTRUCTION
 
       /[NO]SYMBOLS             /SYMBOLS
 
 
 
       /[NO]GLOBALS             /NOGLOBALS
 
       /[NO]SCOPE               /SCOPE
 
         прочие квалификаторы:
 
         /PATCH_AREA
 
 
 
                            - 143 -
 
                         00152-01 33 05
 
 
        Ячейка определяет либо  единичную  ячейку,  содержимое
 
   которой подлежит переписыванию, либо адрес начала  последо-
 
   вательности ячеек, содержимое которых подлежит  переписыва-
 
   нию.
 
 
        Новое содержимое определяет одну или несколько записей
 
   данных или инструкций,  подлежащих  внесению.  Препятствует
 
   введению данных противоречивого типа в  порядке  выполнения
 
   одной команды DEPOSIT.
 
 
           Квалификаторы режимов:
 
        /BYTE
 
        /WORD
 
        /LONG
 
 
 
 
        Определяют помещаются ли  данные  в  размерах  байтов,
 
   слов или двойных слов. Квалификаторы  режима  длины  влияют
 
   только на символьные и числовые данные.  Когда  указывается
 
   инструкция, команда DEPOSIT игнорирует текущий режим  длины
 
   и помещает полностью всю инструкцию.
 
 
         Начальным состоянием является /LONG.
 
         /OCTAL
 
         /DECIMAL
 
         /HEXADECIMAL
 
 
 
 
        определяют основание, при котором действительные адре-
 
   са и числовые данные  интерпретируются  и  воспроизводятся.
 
   Квалификаторы режима  основания  не  влияют  на  символьные
 
   адреса и инструкции, а также на данные в символьном коде.
 
 
 
                            - 144 -
 
                         00152-01 33 05
 
 
         Начальным состоянием является /HEXADECIMAL
 
 
 
         /ASCII
 
         /NOASCII
 
 
 
 
        контролируют,  чтобы  данные,  подлежащие   помещению,
 
   интерпретировались и воспроизводились как  данные  символь-
 
   ные.
 
 
        При выборе квалификатора /ASCII необходимо данные зак-
 
   лючать в кавычки или апострофы.  Текущая  установка  режима
 
   основания не имеет влияния на помещаемые данные в  символь-
 
   ном коде; однако команда DEPOSIT усекает данные,  если  они
 
   превышают по длине ограничения, накладываемые текущим режи-
 
   мом длины.
 
 
         Начальным состоянием является /NOASCII.
 
 
 
         /INSTRUCTION
 
         /NOINSTRUCTION
 
 
 
 
        контролируют,  чтобы  данные,  подлежащие   помещению,
 
   интерпретировались и  воспроизводились  как  инструкции  на
 
   языке МАCRO CM 1700.
 
 
        При выборе квалификатора /INSTRUCTION необходимо инст-
 
   рукцию заключать в ковычки или апострофы. Ни текущий  режим
 
   основания, ни текущий режим длины не влияют  на  помещаемую
 
   инструкцию.
 
 
 
 
 
                            - 145 -
 
                         00152-01 33 05
 
 
         Начальным состоянием является /NOINSTRUCTION.
 
 
 
         /SYMBOLS
 
         /NOSYMBOLS
 
 
 
 
        контролируют, чтобы ячейки воспроизводились как услов-
 
   ные имена или символы, а не как числовые адреса.
 
 
         Начальным состоянием является /SYMBOLS.
 
 
 
         /GLOBALS
 
         NOGLOBALS
 
 
 
 
        контролируют  используется  ли  символьная  запись   в
 
   качестве первого или последнего условного имени в  последо-
 
   вательности поиска.
 
 
         Начальным состоянием является /NOGLOBALS.
 
 
 
         /SCOPE
 
         /NOSCOPE
 
 
 
 
        контролируют  используется  ли  приставка  "SCOPE"   к
 
   условному имени для отыскания указанной ячейки.
 
 
         Начальным состоянием является /NOSCOPE.
 
 
 
               Прочие квалификаторы:
 
 
 
         /PATCH_AREA
 
 
                            - 146 -
 
                         00152-01 33 05
 
 
 
 
 
        сигнализирует программе PATCH о помещении  данных  или
 
   инструкций в текущую область исправлений, начиная с указан-
 
   ной ячейки.
 
 
        Примеры:
 
 
   1.    PATCH> DEPOSIT/ASCII/BYTE 1111 = 'A'
 
         OLD: 00001111:     'B'
 
         NEW: 00001111:     'A'
 
 
 
 
        Команда DEPOSIT требует, чтобы байт данных  символьных
 
   был помещен в ячейке 1111. Дисплей команды DEPOSIT  показы-
 
   вает, что данные были последовательно помещены и что старым
 
   содержимым являлось B.
 
 
   2.   PATCH> DEPOSIT/INSTRUCTION
 
        LOC> 413
 
        NEW> 'CMPW (R1),R6'
 
        NEW> EXIT
 
        OLD: 00000413:    CMPW (R6), R1
 
        NEW: 00000413:    CMPW (R1), R6
 
 
        Команда DEPOSIT помещает одну инструкцию в ячейку 413.
 
   Квалификатор /INSTRUCTION используется  для  указания,  что
 
   помещается именно инструкция. Дисплей показывает, что поме-
 
   щение завершено успешно.
 
 
   3.        PATCH> SET PATCH_AREA NEW_PATCH
 
             PATCH> ALIGN/BYTE
 
             OLD PATCH AREA SIZE:         0000018C
 
 
 
                            - 147 -
 
                         00152-01 33 05
 
 
             OLD PATCH AREA ADDRESS:      000004A8
 
             NEW PATCH AREA SIZE:         0000018C
 
             NEW PATCH AREA ADDRESS:      000004A8
 
             SYMBOL "PAT1" DEFINED AS:    000004A8
 
             PATCH> DEPOSIT/PATCH_AREA/ASCII
 
             LOC> PAT1
 
             NEW> 'RUN'
 
             NEW> 'SKIP'
 
             NEW> EXIT
 
             OLD: PAT1:
 
             OLD: 000004AC:
 
             NEW: PAT1:   'RUN'
 
             NEW: 000004AC:   'SKIP'
 
 
        Команда  SET  PATCH_AREA  устанавливает   определенную
 
   пользователем область исправлений под  названием  NEW_PATCH
 
   как текущую область исправлений. Команда ALIGN/BYTE  вырав-
 
   нивает адрес начала NEW_PATCH в первом  свободном  адресном
 
   байте и определяет символ  PAT1  для  этого  адреса.  Затем
 
   подается команда DEPOSIT/PATCH AREA для помещения в области
 
   исправлений NEW_PATCH, начиная с ячейки PAT1, данных RUN  и
 
   SKIP.
 
 
 
        10.12. Команда EVALUATE
 
 
 
        Описание:
 
 
        команда EVALUATE используется для оценки  арифметичес-
 
   ких выражений, значений и битовых полей переменной длины.
 
 
        Оценка арифметических выражений:
 
 
 
                            - 148 -
 
                         00152-01 33 05
 
 
        команда EVALUATE используется для выполнения  двоичных
 
   и десятичных арифметических операций. (эти операции  обсуж-
 
   дались в подразделе 9.8).
 
 
        Команда EVALUATE интерпретирует выражения и  воспроиз-
 
   водит результаты в текущих режимах длины и основания.
 
 
        Оценка значений:
 
 
        команда EVALUATE используется для опреления  значения,
 
   ассоциирующегося с символом или условным  именем.  Значения
 
   воспроизводятся в соответствии с условиями текущих  режимов
 
   длины и основания.
 
 
        Оценка битовых полей переменной длины:
 
 
        команда  EVALUATE  используется  для   воспроизведения
 
   текущего содержания конкретного битового поля в форме  чис-
 
   лового значения. Синтаксисом для этой команды является:
 
 
      PATCH> EVALUATE уровень <старш. бит:младш. бит>
 
 
 
 
        ограничители битовых позиций ( старший бит  и  младший
 
   бит ) устанавливаются как целые числа.
 
 
        Позиции битов занимают диапозон от 0 ( наименее знача-
 
   щий бит ) до 31 ( наиболее значащий бит ). PATCH  извлекает
 
   содержимое из битовых позиций и представляет это содержимое
 
   в форме двойных слов и условий текущего  режима  основания.
 
   Текущий режим длины  игнорируется.  Следует  заметить,  что
 
   режим ASCII и INSTRUCTION не могут быть  установлены  когда
 
   оцениваются избранные битовые позиции.
 
 
 
 
                            - 149 -
 
                         00152-01 33 05
 
 
        Формат: EVALUATE/квалиф. Выражение [,...]
 
 
        где квалиф. - один или несколько из возможных квалифи-
 
   каторов режима:
 
 
       Квалификаторы режимов      Квлификаторы нач. сост.
 
 
 
            /BYTE
 
            /WORD                   /LONG
 
            /LONG
 
 
 
            /OCTAL
 
            /DECIMAL                /HEXADECIMAL
 
            /HEXADECIMAL
 
 
 
            /[NO]ASCII              /NOASCII
 
            /[NO]INSTRUCTION        /NOINSTRUCTION
 
 
 
            /[NO]GLOBALS            /NOGLOBALS
 
            /[NO]SCOPE              /SCOPE
 
 
        Выражение указывает арифметическое выражение, значение
 
   и соответствующее битовое  поле  или  буквенное  выражение,
 
   которое должно быть заменено числовыми данными в соответст-
 
   вии с условиями  текущих  режимов.  При  оценке  избранного
 
   битового поля и замене его числовым значением формат  выра-
 
   жения должен быть следующим:
 
 
             уровень <старш. бит : младш. бит>
 
 
        Подсказки:
 
 
 
 
 
                            - 150 -
 
                         00152-01 33 05
 
 
        EXP> выражение
 
 
          Квалификаторы режимов:
 
             /BYTE
 
             /WORD
 
             /LONG
 
 
 
 
        определяют длину оцениваемых данных в  байтах,  словах
 
   или двойных  словах.  Квалификаторы  режимов  длины  влияют
 
   только на оценку арифметических выражений. Они не влияют на
 
   оценку битовых полей.
 
 
             Начальным состоянием является /LONG
 
 
 
             /OCTAL
 
             /DECIMAL
 
             /HEXADECIMAL
 
 
 
 
        определяют основание, при котором  интерпретируются  и
 
   воспроизводятся  данные.  Квалификаторы  режима   основания
 
   влияют на оценку арифметических выражений и  битовых  полей
 
   для специфических значений.
 
 
             Начальным состоянием является /HEXADECIMAL.
 
 
 
             /ASCII
 
             /NOASCII
 
 
 
 
        контролируют, чтобы данные интерпретировались как дан-
 
   ные символьные. Квалификатор режима /ASCII или режим  ASCII
 
 
                            - 151 -
 
                         00152-01 33 05
 
 
   не может быть установлен при оценке битовых полей  перемен-
 
   ной длины.
 
 
             Начальным состоянием является /NOASCII.
 
 
 
             /INSTRUCTION
 
             /NOINSTRUCTION
 
 
 
 
        контролируют,  чтобы  данные  интерпретировались   как
 
   инструкции на языке  маCRO  CM  1700.  Квалификатор  режима
 
   /INSTRUCTION или режим INSTRUCTION не может быть установлен
 
   при оценке битовых полей переменной длины.
 
 
             Начальным состоянием является /NOINSTRUCTION.
 
 
 
             /GLOBALS
 
             /NOGLOBALS
 
 
 
 
        контролируют, чтобы символьные  записи  использовались
 
   как первое или последнее условное имя в  последовательности
 
   поиска.
 
 
             Начальным состоянием является /NOGLOBALS.
 
 
 
             /SCOPE
 
             /NOSCOPE
 
 
 
 
        контролируют, чтобы приставка "SCOPE" к условному име-
 
   ни использовалась для отыскания указанной ячейки.
 
 
 
 
                            - 152 -
 
                         00152-01 33 05
 
 
             начальным состоянием является /SCOPE.
 
 
        Примеры:
 
 
   1.        PATCH> EVALUATE/DECIMAL 101 * 123
 
             12423
 
 
        эта команда выполняет требуемую арифметическую  опера-
 
   цию. Числовые значения интерпретируются и воспроизводятся в
 
   десятичном представлении.
 
 
   2.        PATCH> SET MODE DECIMAL
 
             PATCH> EVALUATE ^X200 + < ^D65 / ^012 >
 
             518
 
 
        Команда EVALUATE  выполняет  указанную  арифметическую
 
   операцию  в  соответствии  с  правилами  последовательности
 
   выполнения действий. PATCH сначала делит десятичные  65  на
 
   восьмерчные 12, а затем добавляет частное к шестнадцатирич-
 
   нему 200. Результат воспроизводится в десятичном  представ-
 
   лении.
 
 
   3.        PATCH> EVALUATE  ^070 <5:3>
 
             00000007
 
 
        Эта команда вычисляет значение битового поля для вось-
 
   меричного числа 70. Результат воспроизводится  в  выражении
 
   текущего основания ( в данном  случае  в  шестнадцатиричном
 
   представлении ).
 
 
   4.        PATCH> EVALUATE FDR$PETE
 
             00000800
 
 
        Команда EVALUATE определяет, что значение, связанное с
 
 
 
                            - 153 -
 
                         00152-01 33 05
 
 
   символами FDR$PETE , является 800. Результат воспроизводит-
 
   ся в выражении текущего основания ( в данном случае в деся-
 
   тичном представлении).
 
 
 
        10.13. Команда EXAMINE
 
 
 
        Описание:
 
 
        команда  EXAMINE  используется   для   воспроизведения
 
   содержания определенных ячеек в выражениях текущего режима.
 
 
        Возможно также использовать команду EXAMINE  для  про-
 
   верки содержания  ответвляющей  инструкции  или  содержания
 
   адреса, воспроизведенного в  ответ  на  предыдущую  команду
 
   EXAMINE. Для этого необходимо использовать оператор  обрат-
 
   ной дроби ( бекслэш ) (\), который полностью описывается  в
 
   п. 9.10.4.
 
 
        Формат:
 
 
        EXAMINE/квалиф. Ячейка[:ячейка][,...]
 
 
        где квалиф. - один или несколько из возможных квалифи-
 
   каторов режима:
 
 
        Квалификатор режимов      Начальное состояние
 
             /BYTE
 
             /WORD                /LONG
 
             /LONG
 
 
 
             /OCTAL
 
             /DECIMAL             /HEXADECIMAL
 
             /HEXADECIMAL
 
 
                            - 154 -
 
                         00152-01 33 05
 
 
 
 
             /[NO]ASCII           /NOASCII
 
             /[NO]INSTRUCTION     /NOINSTRUCTION
 
             /[NO]SYMBOLS         /SYMBOLS
 
 
 
             /[NO]GLOBALS         /NOGLOBALS
 
             /[NO]SCOPE           /SCOPE
 
 
        Ячейка определяет одну или несколько ячеек, содержимое
 
   которых  подлежит  воспроизведению.  Многочисленные  ячейки
 
   могут быть указаны в виде разделенного запятыми списка  или
 
   ряда колонок. В обоих случаях они могут быть внесены в еди-
 
   ную цепочку команд.
 
 
        Параметр ячейки может быть также представлен  операто-
 
   ром бекслэш (\). Этот оператор используется  для  просмотра
 
   содержимого ячейки, воспроизведенной в предыдущей команде.
 
 
        Если не указывается ячейка, то будет  воспроизводиться
 
   содержимое следующей соседней ячейки.
 
 
        Kвалификаторы режимов:
 
 
              /BYTE
 
              /WORD
 
              /LONG
 
 
        определяют воспроизведение данных в длине байтов, слов
 
   или двойных слов. Квалификаторы режимов длины влияют только
 
   на данные, представленные в символьном коде и  на  числовые
 
   данные. В случаях  инструкций  команда  EXAMINE  игнорирует
 
   текущий режим длины и  воспроизводит  инструкцию  в  полном
 
   виде. Начальным состоянием является /LONG.
 
 
                            - 155 -
 
                         00152-01 33 05
 
 
              /OCTAL
 
              /DECIMAL
 
              /HEXADECIMAL
 
 
        определяют  основания,  при  которых  интерпретируются
 
   действительные адреса и  воспроизводятся  числовые  данные.
 
   Квалификаторы режимов основания  не  влияют  на  символьные
 
   адреса, символьные инструкции или данные в символьном коде.
 
   Начальным состоянием является /HEXADECIMAL.
 
 
              /ASCII
 
              /NOASCII
 
 
        контролируют воспроизводятся ли  данные  в  символьном
 
   коде. При указании  квалификатора  /ASCII  команда  EXAMINE
 
   усекает данные, если они превышают предел, наложенный теку-
 
   щим режимом длины. Начальным состоянием является /NOASCII.
 
 
              /INSTRUCTION
 
              /NOINSTRUCTION
 
 
        контролируют воспроизводятся ли данные в виде инструк-
 
   ций на MACRO СМ 1700
 
 
        При использовании квалификатора  /INSTRUCTION  команда
 
   EXAMINE при воспроизведении инструкции игнорирует оба теку-
 
   щих режима основания и текущий режим длины.
 
 
              /SYMBOLS
 
              /NOSYMBOLS
 
 
        контролируют воспроизводятся ли ячейки в виде условных
 
   имен или символов, но не в виде числовых адресов. Начальным
 
   состоянием является /SYMBOLS.
 
 
                            - 156 -
 
                         00152-01 33 05
 
 
              /GLOBALS
 
              /NOGLOBALS
 
 
        контролируют используются ли  символические  записи  в
 
   качестве первого или последнего условного имени в  последо-
 
   вательности   поиска.   Начальным    состоянием    является
 
   /NOGLOBALS.
 
 
              /SCOPE
 
              /NOSCOPE
 
 
        контролируют, чтобы приставка "SCOPE" к условному име-
 
   ни использовалась для отыскания указанной ячейки. Начальным
 
   состоянием является /SCOPE.
 
 
        Примеры:
 
 
   1.         PATCH> EXAMINE/INSTRUCTION/NOSYMBOLS 600
 
              00000600:      BNEQ 634
 
              PATCH> EXAMINE/INSTRUCTION/NOSYMBOLS \
 
              00000634:      TSTL R4
 
 
 
 
        В ответ на первую команду EXAMINE указывает, что ячей-
 
   ка памяти 600 содержит  ответвляющую  инструкцию  к  ячейке
 
   634. По скольку знак бекслэш (\) указан во  второй  команде
 
   EXAMINE, то воспроизводится содержимое ячейки 634. Квалифи-
 
   катор /NOSYMBOLS требует, чтобы ячейки  воспроизводились  с
 
   помощью действительных адресов.
 
 
   2.         PATCH> EXAMINE/ASCII 650:.
 
              00000650:       'FE  '
 
              00000654:       'FI  '
 
 
 
                            - 157 -
 
                         00152-01 33 05
 
 
              00000658:       'FO  '
 
              0000065C:       'FUM '
 
 
 
 
        Команда EXAMINE требует  воспроизведения  всех  данных
 
   между ячейкой 650 и текущей ячейкой, представленной точкой,
 
   в форме данных в символьном коде.
 
 
   3.         PATCH> SET MODE SCOPE,SYMBOLS
 
              PATCH> SET SCOPE NEGATION
 
                   .
 
                   .
 
                   .
 
              PATCH> SET MODE NOSCOPE
 
                   .
 
                   .
 
                   .
 
              PATCH> EXAMINE/INSTRUCTION/SCOPE R0_CODE
 
              NEGATION/R0_CODE:  PUSH\L L'NEGATION/RW_DATA+14
 
 
 
 
        В приведенной в примере  3  последовательности  команд
 
   установлены режимы SCOPE и SYMBOLS и область действия опре-
 
   делена как модуль под названием NEGATION. После этого PATCH
 
   выполняет серию команд, режим SCOPE-NOSCOPE выключается,  а
 
   область действия по прежнему установлена NEGATION.
 
 
        Затем команда  EXAMINE  указывается  для  затребования
 
   воспроизведения инструкции в ячейке  R0_CODE.  КвAлификатор
 
   /SCOPE  требует,чтобы   области   действия   предшествовало
 
   R0_CODE и чтобы в таблице символов  отыскивалось  значение,
 
   соответствующее данной записи.
 
 
                            - 158 -
 
                         00152-01 33 05
 
 
   4.        PATCH> EXAMINE/INSTRUCTION   .
 
             00000600:   BNEQ  634
 
             PATCH> EXAMINE/INSTRUCTION
 
             00000602:   BRW   LPLIST
 
             PATCH> EXAMINE/INSTRUCTION  \
 
             LPLIST:  MOVL R3,R4
 
 
        Первая команда EXAMINE требует, чтобы содержимое теку-
 
   щей ячейки ( представленной  точкой  )  воспроизводилось  в
 
   форме инструкции на языке МАCRO  CM  1700.  Вторая  команда
 
   EXAMINE требует, чтобы содержимое следующей соседней ячейки
 
   также воспроизводилось как инструкция МАCRO CM 1700. Третья
 
   команда EXAMINE требует, чтобы было воспроизведено содержи-
 
   мое пункта назначения  предыдущей  ответвляющей  инструкции
 
   (BRW ).
 
 
 
        10.14. Команда EXIT
 
 
 
        Описание:
 
 
        команда EXIT используется для пересечения потока  пов-
 
   торяющихся подсказок таких как NEW>, ECO> или OLD>, а также
 
   для выключения PATCH и передачи управления к интерпретатору
 
   команд операционной системы.  Для  выключения  PATCH  можно
 
   также устанавливать УС/Z  (CTRL/Z).  Сигнал  УС/Z  (CTRL/Z)
 
   подается также в ответ на подсказку PATCH (PATCH>).
 
 
        Не следует ввести команду EXIT  в  ответ  на  значение
 
   подсказки ( VAL> ) для команды  DEFINE.  Для  этой  команды
 
   команда EXIT распознает только подсказку ( NAM> ).
 
 
 
 
 
                            - 159 -
 
                         00152-01 33 05
 
 
        Формат:
 
 
        EXIT
 
 
        Примеры:
 
 
   1.        PATCH> SET MODE
 
             NEW> INSTRUCTION
 
             NEW> NOSYMBOLS
 
             NEW> NOSCOPE
 
             NEW> EXIT
 
             PATCH>
 
 
        Команда SET MODE непрерывно требует новых  указаний  в
 
   отношении установки режимов до тех пор,  пока  не  вводится
 
   команда EXIT.
 
 
   2.        PATCH> EXIT
 
             $
 
 
        Когда указывается  команда  EXIT  на  подсказку  PATCH
 
   (PATCH>) сеанс работы PATCH прекращается и управление пере-
 
   дается обратно к интерпретатору команда операционной систе-
 
   мы.
 
 
   3.        PATCH> DEFINE
 
             NAM> TEST1
 
             NEW> 500
 
             NAM> TEST2
 
             NEW> 800
 
             NAM> EXIT
 
             SYMBOL "TEST1" DEFINED AS 00000500
 
             SYMBOL "TEST2" DEFINED AS 00000800.
 
 
 
                            - 160 -
 
                         00152-01 33 05
 
 
             PATCH>
 
 
        Команда DEFINE присваивает символы TEST1 и TEST2 K 500
 
   и 800, соответственно. Команда EXIT  вводится  в  ответ  на
 
   именную подсказку для прекращения вывода подсказок.
 
 
 
        10.15. Kоманда INSERT
 
 
 
        Oписание:
 
 
        команда INSERT используется для  помещения  инструкций
 
   на языке  MACRO СМ 1700 в специфицированные  ячейки  внутри
 
   файла образов. Для использования  этой  команды  необходимо
 
   установить квалификатор /INSTRUCTION или режим INSTRUCTION.
 
   Для внесения дополнительных данных  в  область  исправлений
 
   используется команда DEPOSIT/PATCH_AREA.
 
 
        Перед введением новой инструкции команда INSERT  подт-
 
   верждает содержимое ячейки, предшествующее введению данных.
 
   (т.е. Воспроизводит текущую инструкцию ).
 
 
        Когда выполняется команда INSERT она заменяет  текущую
 
   инструкцию  ответвляющей  инструкцией  и  помещает  текущую
 
   инструкцию и новые инструкции в текущую  область  исправле-
 
   ний. За последней новой инструкцией всегда следует  ответв-
 
   ляющая инструкция, которая перенаправляет поток  выполнения
 
   программы обратно  к  основной  программе.  Команда  INSERT
 
   автоматически генерирует ответвляющие инструкции.
 
 
        После введения  новых  инструкций  дескриптор  области
 
   исправления обновляется с целью отражения внесенных модифи-
 
   каций.
 
 
 
                            - 161 -
 
                         00152-01 33 05
 
 
        Вычисление ячеек для ответвляющих инструкций:
 
 
        когда выполняется команда INSERT она заменяет  текущую
 
   инструкцию  ответвляющей  инструкцией  и  помещает  текущую
 
   инструкцию и новые инструкции в область  исправлений.  Если
 
   ответвляющая инструкция, направленная к  области  исправле-
 
   ний, оказывается длиннее, чем текущая инструкция, то допол-
 
   нительные инструкции,  следующие  за  текущей  инструкцией,
 
   также перемещаются в  область  исправлений  и  ответвляющая
 
   инструкция  помещается  в  освобождающиеся  ячейки  памяти.
 
   Неиспользованные  ячейки  памяти  заполняются  инструкциями
 
   NOP.
 
 
        С другой стороны, если текущая инструкция  оказывается
 
   длиннее чем ответвляющая  инструкция,  то  неиспользованные
 
   ячейки памяти заполняются инструкциями NOP.
 
 
        Вычисление  относительных  смещений  для  ответвляющих
 
   инструкций:
 
 
        программа PATCH вычисляет относительные  смещения  для
 
   ответвляющих инструкций, генерирует и пересчитывает относи-
 
   тельные смещения для всех  инструкций  ответвляющего  типа,
 
   перемещаемых в область исправлений.  Инструкции  и  данные,
 
   перемещаемые в область исправлений , могут быть  связаны  с
 
   инструкциями,  не  подвергающимися  перемещениям.   Следует
 
   заметить,что PATCH  не  пересчитывает  любые  относительные
 
   смещения в инструкциях, не подвергающихся изменениям.
 
 
        Следует иметь в виду также, что если PATCH  перемещает
 
   инструкцию с текущим адресом, определенным меткой  символь-
 
   ной инструкции,  необходимо  проверить  и  откорректировать
 
 
 
                            - 162 -
 
                         00152-01 33 05
 
 
   каждую ссылку, сделанную на эту метку.
 
 
        Формат:
 
 
        INSERT/квалиф. Ячейка=текущая инструкция  новая  инст-
 
   рукция . . .
 
 
        Где квалиф. - один или несколько из возможных квалифи-
 
   каторов режима:
 
 
       Квалификаторы режимов        Начальное состояние
 
 
 
             /OCTAL
 
             /DECIMAL               /HEXADECIMAL
 
             /HEXADECIMAL
 
 
 
             /[NO]INSTRUCTION       /NOINSTRUCTION
 
             /[NO]SYMBOLS           /SYMBOLS
 
 
 
             /[NO]GLOBALS           /NOGLOBALS
 
             /[NO]SCOPE             /SCOPE
 
 
        Ячейка указывает адрес, после которого одна  или  нес-
 
   колько инструкций должны быть добавлены.
 
 
        Текущая инструкция указывает инструкцию, занимающую  в
 
   текущий момент специфическую ячейку.
 
 
        Новая инструкция указывает одну или несколько инструк-
 
   ций, подлежащих введению файла образов в  след  за  текущей
 
   инструкцией.
 
 
         Квалификаторы режимов:
 
             /OCTAL
 
 
                            - 163 -
 
                         00152-01 33 05
 
 
             /DECIMAL
 
             /HEXADECIMAL
 
 
        определяют основания, при  которых  интепретируются  и
 
   воиспроизводятся действительные адреса. Квалификаторы режи-
 
   мов основания не влияют на символьные инструкции.
 
 
        Начальным состоянием является /HEXADECIMAL.
 
 
             /INSTRUCTION
 
             /NOINSTRUCTION
 
 
        контролируют, чтобы данные, подлежащие введению в файл
 
   образов, интерпретировались как инструкции на  языке  МАCRO
 
   CM 1700. Для использования команд INSERT необходимо устано-
 
   вить   квалификатор   режима   /INSTRUCTION    или    режим
 
   INSTRUCTION. Начальным состоянием является /NOINSTRUCTION.
 
 
             /SYMBOLS
 
             /NOSYMBOLS
 
 
        контролируют, чтобы ячейки воспроизводились как услов-
 
   ные имена или символы, а не как числовые адреса.  Начальным
 
   состоянием является /SYMBOLS.
 
 
        /GLOBALS
 
 
        /NOGLOBALS
 
 
        контролируют, чтобы символьные  записи  использовались
 
   как первое или последнее условное имя в  последовательности
 
   поиска.
 
 
        Начальным состоянием является /NOGLOBALS.
 
 
 
 
                            - 164 -
 
                         00152-01 33 05
 
 
        /SCOPE
 
 
        /NOSCOPE
 
 
        контролируют, чтобы приставка  ''SCOPE''использовалась
 
   для поиска ячеек.
 
 
        Начальным состоянием является /SCOPE.
 
 
        Примеры :
 
 
   1.      PATCH> SET MODE INSTRUCTION
 
           PATCH> EXAMINE 600
 
           00000600:       MOVL R1,R4
 
           PATCH> EXAMINE
 
           00000602:       BSBB LP_NAME
 
           PATCH> INSERT 602 = 'BSBB LP_NAME'
 
           NEW> 'CVTFW R3,#32'
 
           NEW> EXIT
 
           OLD:    602:    BSBB    LP_NAME
 
           OLD:    604:    CMPB    R2,R8
 
           NEW:    602:    BRW     PAA
 
           NEW:    605:    NOP
 
           NEW:    606:    NOP
 
           NEW:    PAA:    BSBW    LP_NAME
 
           NEW:    30374:  CVTFW   R3,#32
 
           NEW:    30377:  CMPB    R2,R8
 
           NEW:    30740:  BRW     607
 
 
        Этот пример  показывает  процедуру,  используемую  для
 
   введения дополнительной инструкции в существующую  програм-
 
   му. После подтверждения содержания ячейки 602 и определения
 
   новой  инструкции,  подлежащей  введению,  программа  PATCH
 
 
                            - 165 -
 
                         00152-01 33 05
 
 
   выполняет следующие операции:
 
 
        1) определяет сколько инструкций из существующей прог-
 
   раммы должно быть  перемещено  в  область  исправлений  для
 
   освобождения места для ответвляющей инструкции;
 
 
        2) перемещает инструкции, вычисленные в операции 1,для
 
   текущей области исправлений и вводит на их место ответвляю-
 
   щую инструкцию. Программа PATCH вычисляет значение  относи-
 
   тельного смещения для ответвляющей инструкции и  генерирует
 
   символьное имя  в  области  исправлений  для  идентификации
 
   пункта назначения ответвляющей инструкции;
 
 
        3) заполняет незанятые ячейки  программы  инструкциями
 
   NOP;
 
 
        4) пересчитывает относительные смещения для всех инст-
 
   рукций ответвляющего типа, перемещаемых в области исправле-
 
   ний;
 
 
        5) вводит в область исправлений ответвляющую  инструк-
 
   цию, которая  перенаправляет  выполнение  потока  программы
 
   обратно к основной операционной системе.
 
 
 
        10.16. Команда REPLACE
 
 
 
        Описание:
 
 
        команда REPLACE  используется  для  замены  содержания
 
   одной или нескольких ячеек новыми инструкциями или  данными
 
   в выражениях  текущих  режимов.  Перед  выполнением  замены
 
   команда REPLACE подтверждает содержимое указанных ячеек.
 
 
 
 
                            - 166 -
 
                         00152-01 33 05
 
 
        Если при замене текущих  инструкций  новые  инструкции
 
   занимают в памяти больше байтов, чем текущие инструкции, то
 
   новые инструкции перемещаются в область исправлений и прог-
 
   рамма PATCH генерирует ответвляющие инструкции для  поддер-
 
   жания  логического  хода  выполнения  программы.  Программа
 
   PATCH  генерирует  ответвляющие  инструкции   для   команды
 
   REPLACE тем же способом, что и команды INSERT .  Все  неис-
 
   пользуемые байты заполняются инструкциями NOP.
 
 
        Если область исправлений используется  для  размещения
 
   нового содержания, дескриптор  области  исправлений  обнов-
 
   ляется для отражения модификации.
 
 
        При замене данных в символьном коде или числовых  дан-
 
   ных, число заменяемых записей не может  превосходить  число
 
   существующих записей.  Это  означает,  например,  что  если
 
   подтверждается содержимое шести соседних  ячеек,  то  можно
 
   заменить содержимое только этих  шести  ячеек.  Если  число
 
   заменяемых записей меньше, чем число существующих  записей,
 
   то остальные ячейки заполняются нулями.
 
 
        Программа PATCH усекает заменяемые  записи,  если  они
 
   превышают предел, налагаемый на них текущим режимом  длины.
 
   Для символьного кода исключаются крайние правые знаки.  Для
 
   числовых данных крайние левые цифры вычеркиваются.
 
 
        Вычисление  относительных  смещений  для  ответвляющих
 
   инструкций:
 
 
        программа PATCH вычисляет относительные  смещения  для
 
   ответвляющих инструкций, генерирует и пересчитывает относи-
 
   тельные смещения для всех  инструкций  ответвляющего  типа,
 
 
 
                            - 167 -
 
                         00152-01 33 05
 
 
   перемещаемых в область исправлений.на инструкции и  данные,
 
   перемещаемые  в  область  исправлений,  можно  ссылаться  с
 
   помощью инструкций, не подвергавшихся перемещению.  Следует
 
   заметить, что PATCH не пересчитывает относительные смещения
 
   в инструкциях, не подвергавшихся перемещению.
 
 
        Следует также заметить, что если PATCH перемещает одну
 
   инструкцию с текущим адресом, определенным  как  символьная
 
   метка, необходимо проверить и откорректировать все  ссылки,
 
   сделанные на эту метку. Полного описания  меток  символьных
 
   инструкций.
 
 
        Команда REPLACE подтверждает, что одна  или  несколько
 
   соседних ячеек содержат указанные сведения, а  затем  заме-
 
   няет это содержимое новым.
 
 
        Формат:
 
 
        REPLACE/квалиф. Ячейка = текущее содержимое [,...]
 
        новое содержимое
 
                   .
 
                   .
 
                   .
 
 
        Где квалиф. - один или несколько из возможных квалифи-
 
   каторов режима:
 
 
   Квалификаторы режимов           Начальное состояние
 
   /BYTE
 
   /WORD
 
   /LONG                           /LONG
 
 
 
   /OCTAL
 
 
                            - 168 -
 
                         00152-01 33 05
 
 
   /DECIMAL
 
   /HEXADECIMAL                    /HEXADECIMAL
 
 
 
   /[NO]ASCII                      /NOASCII
 
   /[NO]INSTRUCTION                /NOINSTRUCTION
 
   /[NO]SYMBOLS                    /SYMBOLS
 
 
 
 
 
   /[NO]GLOBALS                    /NOGLOBALS
 
   /[NO]SCOPE                      /SCOPE
 
 
        Ячейка указывает либо одну ячейку, содержимое  которой
 
   должно быть заменено, либо адрес начала  последовательности
 
   ячеек, содержимое которых должно быть заменено.
 
 
        Текущее содержимое указывает одну или несколько  запи-
 
   сей данных или инструкций, подлежащих  замене.  Данные  или
 
   инструкции должны являться  действительным  содержимым.  Не
 
   следует  указывать  данные  противоречивых  типов  в  одной
 
   команде REPLACE.
 
 
        Новое содержимое указывает одну или несколько  записей
 
   данных или  инструкций,  которые  должны  заменить  текущее
 
   содержимое.не следует указывать данных противоречивых типов
 
   в одной команде REPLACE.
 
 
        Квалификаторы режимов :
 
 
           /BYTE
 
           /WORD
 
           /LONG
 
 
 
 
 
                            - 169 -
 
                         00152-01 33 05
 
 
        определяют замену данных в размерах байтов,  слов  или
 
   двойных слов. Квалификаторы режимов длины влияют только  на
 
   данные в символьном коде и числовые  данные.  При  указании
 
   инструкции команда REPLACE игнорирует текущий режим длины и
 
   заменяет полные инструкции.
 
 
        Начальным состоянием является /LONG.
 
 
           /OCTAL
 
           /DECIMAL
 
           /HEXADECIMAL
 
 
        определяют основания, при которых  интерпретируются  и
 
   воспроизводятся числовые  данные  и  адреса.  Квалификаторы
 
   режима основания не влияют на символьные адреса,  символные
 
   инструкции и данные в символьном коде.
 
 
        Начальным состоянием является /HEXADECIMAL.
 
 
           /ASCII
 
           /NOASCII
 
 
        контролируют, чтобы данные, подлежащие замене, и  дан-
 
   ные, подлежащие помещению, интерпретировались и воспроизво-
 
   дились как данные в символьном коде.
 
 
        При установлении квалификатора /ASCII необходимо  дан-
 
   ные заключать в кавычки или апострофы. Текущий режим  осно-
 
   вания не имеет влияния на данные в символьном коде,  подле-
 
   жащие замене или помещению; команда REPLACE усекает  данные
 
   в символьном коде, если они превышают длину,  установленную
 
   текущим режимом длины.
 
 
 
 
 
                            - 170 -
 
                         00152-01 33 05
 
 
        Начальным состоянием является /NOASCII.
 
 
           /INSTRUCTION
 
           /NOINSTRUCTION
 
 
        контролируют, чтобы данные, подлежащие замене, и  дан-
 
   ные, подлежащие помещению, интерпретировались и воспроизво-
 
   дились как инструкции в коде МАCRO CM 1700.
 
 
        При установлении квалификатора /INSTRUCTION инструкции
 
   должны заключаться в  кавычки  или  апострофы.  Ни  текущий
 
   режим основания, ни текущий режим длины не влияют на  заме-
 
   няемую инструкцию.
 
 
        Начальным состоянием является /NOINSTRUCTION.
 
 
           /SYMBOLS
 
           /NOSYMBOLS
 
 
        контролируют, чтобы ячейки,  подлежащие  воспроизведе-
 
   нию, воспроизводились как условные имена или символы, а  не
 
   как числовые адреса.
 
 
        Начальным состоянием является /SYMBOLS.
 
 
           /GLOBALS
 
           /NOGLOBALS
 
 
        контролируют, чтобы символьные  записи  использовались
 
   как первое или последнее  условное  имя  последовательности
 
   поиска.
 
 
        Начальным состоянием является /NOGLOBALS.
 
 
           /SCOPE
 
 
 
                            - 171 -
 
                         00152-01 33 05
 
 
           /NOSCOPE
 
 
        контролируют,  чтобы  приставка  к   условному   имени
 
   ''SCOPE'' использовалась для поиска /SCOPE.
 
 
        Примеры :
 
 
   1.      PATCH> SET MODE INSTRUCTION,NOSYMBOLS
 
           PATCH> REPLACE 600 = 'TSTL R4'
 
           NEW> 'CMPB R2,R4'
 
           NEW> EXIT
 
           OLD:    00000600: TSTL R4
 
           OLD:    00000602: BEQL 00000610
 
           NEW:    00000600: BRW 0000784A
 
           NEW:    00000604: NOP
 
           NEW:
 
           NEW:    0000784A: CMPB R2,R4
 
           NEW:    0000784D: BNEQ 7852
 
           NEW:    0000784F: BRW 00000610
 
                   00007852: BRW 605
 
 
        Инструкция, занимающая ячейку 600, заменяется инструк-
 
   цией CMPB R2,R4. Эта инструкция занимает больше байтов, чем
 
   инструкция TSTL R4.Tаким образом,  чтобы  освободить  место
 
   для инструкции CMPB R2,R4, инструкция CMPB R2,R4 и инструк-
 
   ция, которая следует за  TSTL  R4  перемещаются  в  текущую
 
   область  исправлений.  Ответвляющая  инструкция  помещается
 
   вместо TSTL  R4  для  направления  выполнения  программы  в
 
   области исправлений.  Последняя  инструкция,  помещенная  в
 
   области  исправлений,  является  ответвляющей  инструкцией,
 
   направленной обратно к основной операционной системе.
 
 
 
 
                            - 172 -
 
                         00152-01 33 05
 
 
   2.      PATCH> SET SCOPE MOD1
 
           PATCH> REPLACE/SCOPE RO_CODE+20 = 1000
 
           NEW> 100.
 
           NEW> EXIT
 
           OLD:    MOD1\E: 00001000
 
           NEW:    MOD1\E: 00000100
 
 
        Команда SET SCOPE устанавливает текущую область дейст-
 
   вия  под  символьным  названием  MOD1.  Последующая  комнда
 
   REPLACE требует, чтобы содержимое ячейки RO_CODE+20 в моду-
 
   ле, назыаемом MOD1 было заменено  новыми  данными.  Дисплей
 
   показывает, что замена совершена корректно.  Следует  заме-
 
   тить, что ячейка, обозначенная условным именем MOD1\E, бла-
 
   годаря символу  е  является  ближайшим  символом  к  ячейке
 
   RO_CODE+20.
 
 
 
        10.17. Команда SET ECO
 
 
 
        Описание:
 
 
        команда SET ECO используется  для  определения  уровня
 
   ECO, для внесения исправлений. При внесении  исправлений  в
 
   файл образов первой командой, которая вводится, должна быть
 
   команда SET ECO. Эта команда обеспечивает способ  идентифи-
 
   кации внесенных исправлений, и позволяет обрабатывать  изб-
 
   ранные исправления, используя  командную  процедуру.  Когда
 
   программа PATCH обрабатывает командную процедуру, она отыс-
 
   кивает файл по уровням ECO и обрабатывает только те исправ-
 
   ления, которые представлены указанными уровнями  ECO.  Исп-
 
   равления, не представленные уровнями ECO, не  обрабатывают-
 
   ся.
 
 
                            - 173 -
 
                         00152-01 33 05
 
 
        В течение сеанса работы PATCH можно  подавать  столько
 
   команд SET ECO, сколько необходимо, если  какой-то  уровень
 
   ECO уже употреблялся, то он не может быть снова использован
 
   в данном конкретном файле образов. Если  исправление  начи-
 
   нается с команды SET ECO,то оно должно заканчиваться коман-
 
   дой UPDATE. Если команда UPDATE  не  подается,  то  уровень
 
   ECO, определенный командой SET ECO,  не  устанавливается  (
 
   т.е. исправление не вносится в файл образов )  и  не  может
 
   быть подана команда SET ECO.
 
 
        Формат:
 
 
           SET ECO   ECO - уровень
 
 
        где есо-уровень определяет десятичное целое число меж-
 
   ду 1 и 128, включительно. Уровни ECO  вне  этого  диапазона
 
   целых чисел являются недействительными.
 
 
        Пример.
 
 
           PATCH> SET ECO 15
 
            .
 
            .
 
            .
 
           PATCH> UPDATE
 
           %PATCH-I-WRTFIL, UPDATING IMAGE FILE DMA3:[HOWARD]
 
                                           NUFILE.EXE;2
 
           PATCH> CHECK NOT ECO 15
 
           %PATCH-E-ECOSET, ECO LEVEL 15 ALREADY SET IN DMA3:
 
                                   [HOWARD]NUFILE.EXE;2
 
 
        Команда SET ECO определяет уровень ECO для  соответст-
 
   вующего исправления равным 15.  Затем  команды  вводятся  в
 
 
                            - 174 -
 
                         00152-01 33 05
 
 
   файл. Когда подается команда UPDATE,  устанавливается  уро-
 
   вень ECO и файл  образов  обновляется,  включая  изменения,
 
   вносимые новыми командами. CHECK  NOT  ECO  указывает,  что
 
   уровень ECO 15 установлен в файле образов NUFILE.EXE .
 
 
 
        10.18. Команда SET MODE
 
 
 
        Описание:
 
 
        команда SET MODE используется для контроля  синтаксиса
 
   вводимых команд и значений , воспроизводимых PATCH .
 
 
        Формат:
 
 
           SET MODE  режим[,...]
 
 
        где режим устанавливает один или несколько режимов  из
 
   категорий контекста , основания длины и символьных  обозна-
 
   чений , которые используются в качестве текущих  режимов  .
 
   Эти режимы определяют  как  PATCH  интерпретирует  вводимые
 
   записи и воспроизводит выходные данные .
 
 
        Командами , зависящими от режимов ввода и  воспроизве-
 
   дения , являются : DELETE , DEPOSIT , EVALUATE , EXAMINE  ,
 
   INSERT , REPLACE , VERIFY .
 
 
        Следует также заметить,  что  установка  режима  может
 
   быть изменена используя квалификатор режима в  сочетании  с
 
   сответствующей командой.
 
 
        Примеры :
 
 
   1.      PATCH> SET MODE INSTRUCTION,GLOBALS,NOSYMBOLS
 
 
 
 
                            - 175 -
 
                         00152-01 33 05
 
 
        Эта  команда  требует,   чтобы   режимы   INSTRUCTION,
 
   GLOBALS, NOSYMBOLS устанавливались как текущие режимы.
 
 
   2.      PATCH> SET MODE INSTRUCTION
 
           PATCH> DEPOSIT 78B = 'BEQL NEWPATCH'
 
 
        Эта команда SET MODE устанавливает  режим  INSTRUCTION
 
   как текущий режим. Последующая команда DEPOSIT может помес-
 
   тить одну  инструкцию  без  указания  квалификатора  режима
 
   /INSTRUCTION.
 
 
   3.      PATCH> SET MODE
 
           NEW> OCTAL
 
           NEW> WORD
 
           NEW> EXIT
 
 
        В этом примере команда SET MODE непрерывно запрашивает
 
   новые режимы до введения команды EXIT.
 
 
 
        10.19. Команда SET MODULE
 
 
 
        Описание:
 
 
        команда SET MODULE используется для введения локальной
 
   символьной информации из указанных модулей в таблицу симво-
 
   лов PATCH, а также обеспечивает последовательное выполнение
 
   правил для перевода символьной информации в программу PATCH
 
    
 
 
        Если таблица символов оказывается  слишком  малой  для
 
   помещения локальной  символьной  информации,  то  программа
 
   PATCH воспроизводит сообщение об ошибке.
 
 
 
 
                            - 176 -
 
                         00152-01 33 05
 
 
        Следует заметить, что  если  исправляется  разделяемый
 
   образ, то ни локальной, ни глобальной символьной информации
 
   к PATCH не подводится, могут приниматься только универсаль-
 
   ные символы.
 
 
        Формат:
 
 
           SET MODULE/Kвалиф.  Имя модуля [,...]
 
 
        где имя модуля устанавливает имя одного или нескольких
 
   модулей, локальные символы которых подлежат вводу в таблицу
 
   символов.
 
 
        Не следует устанавливать имя модуля, если используется
 
   квалификатор /ALL.
 
 
        Квалификаторы:
 
 
           /ALL
 
 
        требует, чтобы локальная символьная информация из всех
 
   модулей в файле была введена в таблицу символов.
 
 
        Примеры :
 
 
   1.      PATCH> SET MODULE GREAT_APES
 
           PATCH> EXAMINE/ASCII ORANGUTANS:ORANGUTANS+8
 
           GREAT_APES\ORANGUTANS: 'AMAZ'
 
           GREAT_APES\ORANGUTANS+4: 'ING'
 
 
        Команда SET MODULE  вводит  всю  локальную  символьную
 
   информацию в модуль GREAT_APES в таблицу  символов.  После-
 
   дующая команда EXAMINE может использовать локальный  символ
 
   ORANGUTANS для ссылки на конкретные ячейки.
 
 
 
 
                            - 177 -
 
                         00152-01 33 05
 
 
   2.      PATCH> SET MODULE/ALL
 
 
        Эта команда требует, чтобы вся  символьная  информация
 
   всех модулей была добавлена в таблицу символов.
 
 
 
        10.20. Команда SET PATCH_AREA
 
 
 
        Описание:
 
 
        команда  SET  PATCH_AREA  используется  для   перевода
 
   области исправлений ошибок PATCH в область исправления оши-
 
   бок, определенную на этапе ассемблирования и компилирования
 
   программы.
 
 
        Если используется область исправления ошибок,  опреде-
 
   ленная пользователем,  то  ее  дескриптор  обновляется  для
 
   отражения любых модификаций.
 
 
        Формат:
 
 
        SET PATCH_AREA адрес дескиптора
 
 
        где адрес  дескриптора  определяет  адрес  дескриптора
 
   области исправлений. Дескриптор области  исправлений  может
 
   быть представлен символьным или числовым адресом.
 
 
        Пример.
 
 
           PATCH> SET PATCH_AREA LRDPATCHES
 
           PATCH> SHOW PATCH_AREA
 
           CURRENT PATCH AREA SIZE:    0000004F
 
           CURRENT PATCH AREA ADDRESS: 000005F2
 
 
        команда SET PATCH_AREA устанавливает область исправле-
 
 
 
                            - 178 -
 
                         00152-01 33 05
 
 
   ний, определенную пользователем LRDPATCHES в качестве теку-
 
   щей области исправлений. Команда SHOW PATCH_AREA сообщает о
 
   текущем статусе области LRDPATCHES. При наличии этой инфор-
 
   мации  можно  помещать  инструкции  или  данные  в  область
 
   LRDPATCHES.
 
 
 
        10.21. Команда SET SCOPE
 
 
 
        Описание:
 
 
        команда SET SCOPE используется для установления  имени
 
   конкретного модуля (и  имени  программы,  если  указана)  в
 
   качестве определенной  области  действия,  используемой  по
 
   правилам перевода условных имен и символов в числовые  зна-
 
   чения. Эти правила изложены в разделе 6.
 
 
        При введении команды SET SCOPE программа  PATCH  также
 
   вводит локальную символьную информацию, связанную с указан-
 
   ным модулем. Если таблица  символов  оказывается  мала  для
 
   принятия этой информации,  то  PATCH  выдает  сообщение  об
 
   ошибке.
 
 
        Для определения модулей, к  которым  может  относиться
 
   область действия, используется команда SHOW MODULE.
 
 
        Если локальные символы в модуле не были введены в таб-
 
   лицу символов командой SET MODULE,  то  команда  SET  SCOPE
 
   вводит эти символы в таблицу.
 
 
        Формат:
 
 
   SET SCOPE имя модуля[\имя
 
                 программы[\...]]
 
 
                            - 179 -
 
                         00152-01 33 05
 
 
        где имя модуля определяет имя модуля, к которому отно-
 
   сится область действия.
 
 
        Имя программы определяет имя программы, содержащейся в
 
   модуле, к которому относится область действия.
 
 
        Примеры:
 
 
           1. PATCH> SET SCOPE CARP_LPT
 
 
        Этот набор команд устанавливает область  действия  как
 
   CARP_LPT.
 
 
   2.      PATCH> SET SCOPE
 
           NEW> LIP_SIGN
 
           %PATCH-W-NOSUCHMODU, NO SUCH MODULE NAME 'LIP_SIGN'
 
 
        В этом примере нет модуля под названием LIP_SIGN. Поэ-
 
   тому команда SET SCOPE не выполняется и сохранется предыду-
 
   щая установка области действия.
 
 
 
        10.22. Команда SHOW MODE
 
 
 
        Описание:
 
 
        команда SHOW MODE используется для сообщения  о  режи-
 
   мах, установленных в качестве текущих.
 
 
        Эта команда преимущественно используется  с  командами
 
   SET MODE и/или CANCEL MODE. Она указывает  условие  текущих
 
   режимов, позволяя изменять один или несколько из них,  если
 
   это необходимо.
 
 
        Формат:
 
 
 
                            - 180 -
 
                         00152-01 33 05
 
 
           SHOW MODE
 
 
        Пример:
 
 
    NOINSTRUCTION,NOASCII,SCOPE,NOGLOBALS,HEXADECIMAL,LONG
 
 
        Команда SHOW MODE требует, чтобы  были  воспроизведены
 
   текущие режимы.
 
 
 
        10.23. Команда SHOW MODULE
 
 
 
        Описание:
 
 
        команда SHOW MODULE используется  для  воспроизведения
 
   всех модулей в файле образов и указывает, доступны  ли  все
 
   символы, содержащиеся в  модулях,  для  использования.  Она
 
   также указывает размеры пространства таблицы символов, тре-
 
   буемого для каждого модуля  и  каждой  программы,  а  также
 
   общие размеры неиспользованного пространства в таблице сим-
 
   волов.
 
 
        Формат:
 
 
        SHOW MODULE
 
 
        Пример.
 
 
           PATCH> SHOW MODULE
 
           MODULE NAME     SYMBOLS   SIZE
 
           AVERAGE           NO       52.
 
           OST$LINKAGE       NO      128.
 
           TOTAL MODULES:    2.
 
           REMAINING SIZE:   64052.
 
           PATCH> SET MODULE/ALL
 
 
                            - 181 -
 
                         00152-01 33 05
 
 
           PATCH>SHOW MODULE
 
           MODULE NAME     SYMBOLS   SIZE
 
           AVERAGE           YES      52.
 
           OTS$LINKAGE       YES     128.
 
           TOTAL MODULES:     2.
 
           REMAINING SIZE:    63880.
 
 
        Первая команда SHOW MODULE указывает, что имеется  два
 
   модуля в текущем файле образов, однако, ни один из  них  не
 
   имеет символьного имени,  введенного  в  таблицу  символов.
 
   Команда SET MODULE требует, чтобы вся локальная  символьная
 
   информация была введена в таблицу символов. Вторая  команда
 
   SHOW MODULE подтверждает наличие локальных символов в  таб-
 
   лице символов.
 
 
 
        10.24. Команда SHOW PATCH_AREA
 
 
 
        Описание:
 
 
        используется для сообщения о размерах и адресе  начала
 
   текущей области исправлений в шестнадцатиричном представле-
 
   нии независимо  от  установки  текущего  режима  основания.
 
   Обычно эта команда используется либо  с  командой  ALIGN  ,
 
   либо с DEPOSIT/PATCH_AREA. В  обоих  случаях  можно  узнать
 
   статус области исправлений перед выравниванием ее или поме-
 
   щением данных в нее.
 
 
        Формат:
 
 
        SHOW PATCH_AREA
 
 
        Пример.
 
 
 
                            - 182 -
 
                         00152-01 33 05
 
 
           PATCH> SHOW PATCH_AREA
 
           CURRENT PATCH AREA SIZE:    00000030
 
           CURRENT PATCH AREA ADDRESS: 00000308
 
           DEPOSIT/PATCH_AREA/ASCII   308= 'AT'
 
           OLD:  00000308:
 
           NEW:  00000308:   'AT'
 
 
        Дисплей  SHOW  PATCH_AREA  показывает,   что   текущая
 
   область исправлений занимает 30 байтов,  а  адресом  начала
 
   является ячейка памяти 308. Следующая команда DEPOSIT может
 
   помещать данные в эту область исправлений.
 
 
 
        10.25. Команда SHOW SCOPE
 
 
 
        Описание:
 
 
        команда SHOW SCOPE  используется  для  воспроизведения
 
   текущей области действия.
 
 
        Формат:
 
 
        SHOW SCOPE
 
 
        пример.
 
 
        PATCH> SHOW SCOPE
 
 
        SCOPE: TEMP1
 
 
        PATCH> EXAMINE DEGREES+8
 
 
        Команда SCOW SCOPE  указывает,  что  текущей  областью
 
   действий является TEMP1. Последующая команда EXAMINE  может
 
   ссылаться на ячейку, используя локальную символьную  инфор-
 
 
 
                            - 183 -
 
                         00152-01 33 05
 
 
   мацию, содержащуюся в TEMP1.
 
 
 
        10.26. Команда UPDATE
 
 
 
        Описание:
 
 
        команда UPDATE используется для внесения исправлений в
 
   файл образов.
 
 
        Команда UPDATE является терминатором исправления.  Эта
 
   команда вносит предыдущие исправление в файл образов и  тем
 
   самым создает выходной файл образов. Если не  будет  подана
 
   команда UPDATE, то никакого выходного файла образов создано
 
   не будет.
 
 
        В течение одного сеанса работы  PATCH  можно  подавать
 
   несколько команд UPDATE. По первой команде UPDATE создается
 
   новый выходной файл образов.  Последующие  команды  UPDATE,
 
   выдаваемые в  течении  сеанса  работы  PATCH,  переписывают
 
   выходной файл образов, т.е. новый вариант  выходного  файла
 
   образов не создается.
 
 
        Если подается команда SET ECO , то последующая команда
 
   UPDATE автоматически устанавливает уровень ECO.
 
 
        Формат:
 
 
        UPDATE
 
 
        пример.
 
            .
 
            .
 
            .
 
 
 
                            - 184 -
 
                         00152-01 33 05
 
 
   PATCH> UPDATE
 
   %PATCH-I-WRTFIL,
 
   UPDATING IMAGE FILE DM1:[MASON]HOROSCOPE.EXE14
 
 
        Команда UPDATE вносит предыдущие  исправления  в  файл
 
   образов HOROSCOPE.EXE. Дисплей показывает, что файл образов
 
   успешно обновлен.
 
 
 
        10.27. Команда VERIFY
 
 
 
        Описание:
 
 
        Команда VERIFY  используется  для  подтверждения,  что
 
   ячейка или  несколько  соседних  ячеек  включают  указанное
 
   содержимое ( инструкции или данные ).
 
 
        Команда VERIFY используется  в  сочетании  с  командой
 
   DEPOSIT. Команда DEPOSIT не подтверждает записей  перед  их
 
   переписыванием. Для проверки содержимого ячеек , подлежащих
 
   модификации, подается команда VERIFY.
 
 
        Команда VERIFY  также  удобна  при  исправлении  файла
 
   образов посредством командной процедуры. Используя  команду
 
   VERIFY, можно проверить конкретные ячейки  перед  тем,  как
 
   попытаться  модифицировать  их  содержимое.  Если   команда
 
   VERIFY не выполняется, то исправление не вносится  и  прог-
 
   рамма PATCH требует следующей команды SET ECO. Если никаких
 
   команд SET ECO не поступает, то командная процедура прекра-
 
   щается.
 
 
        Формат:
 
 
 
 
 
                            - 185 -
 
                         00152-01 33 05
 
 
     VERIFY/квалиф.   Ячейка=текущее содержимое[...]
 
 
        где квалиф. - один или несколько из возможных квалифи-
 
   каторов режима:
 
 
   квалификаторы режимов      начальное состояние
 
   /BYTE
 
   /WORD
 
   /LONG                      /LONG
 
 
 
   /OCTAL
 
   /DECIMAL
 
   /HEXADECIMAL                /HEXADECIMAL
 
 
 
   /[NO]ASCII                  /NOASCII
 
   /[NO]INSTRUCTION            /NOINSTRUKCION
 
   /[NO]SYMBOLS                /SYMBOLS
 
 
 
   /[NO]GLOBALS                /NOGLOBALS
 
   /[NO]SCOPE                  /SCOPE
 
 
        Ячейка указывает либо одну ячейку, содержимое  которой
 
   подлежит  проверке,  или  адрес  начала  последовательности
 
   ячеек, содержимое которых подлежит проверке.
 
 
        Текущее состояние указывает одну или несколько записей
 
   данных или инструкций, подлежащих подтверждению.  Подтверж-
 
   даемые данные или  инструкции  должно  быть  действительным
 
   содержимым.
 
 
        Не следует указывать  данные  противоречивых  типов  в
 
   одной команде VERIFY.
 
 
 
                            - 186 -
 
                         00152-01 33 05
 
 
        Квалификаторы режимов:
 
 
   /BYTE
 
   /WORD
 
   /LONG
 
 
        определяют, чтобы  данные  подтверждались  в  размерах
 
   байтов, слов и двойных слов.  Квалификаторы  режимов  длины
 
   влияют только на данные в символьном  коде  и  на  числовые
 
   данные. При указании инструкции команда  VERIFY  игнорирует
 
   текущий режим длины и подтверждает всю инструкцию.
 
 
        Начальным состоянием является /LONG.
 
 
   /OCTAL
 
   /DECIMAL
 
   /HEXADECIMAL
 
 
        определяют основание выводимых данных и адресов.  Ква-
 
   лификаторы режимов основания не влияют на символьные  адре-
 
   са, символьные инструкции и данные в символьном коде.
 
 
        Начальным состоянием являются /HEXADECIMAL.
 
 
   /ASCII
 
   /NOASCII
 
 
        контролируют, чтобы данные, подлежащие  подтверждению,
 
   интерпретировались и воспроизводились как данные в символь-
 
   ном коде. Если устанавливается квалификатор /ASCII, то дан-
 
   ные заключаются в  кавычки  или  апострофы.  Текущий  режим
 
   основания не влияет на подтверждаемые данные  в  символьном
 
   коде; однако, команда VERIFY усекает данные, если они  пре-
 
   вышают предел, налогаемый на них текущим режимом длины.
 
 
                            - 187 -
 
                         00152-01 33 05
 
 
        Начальным состоянием является /NOASCII.
 
 
   /INSTRUCTION
 
   /NOINSTRUCTION
 
 
        контроллируют, чтобы данные подлежащие  подтверждению,
 
   интерпретировались и  воспроизводились  как  инструкции  на
 
   языке МАCRO CM 1700.
 
 
        При использовании квалификатора /INSTRUCTION  инструк-
 
   ции заключаются в кавычки или апострофы. Ни  текущий  режим
 
   основания, ни текущий режим длины не влияют на  инструкцию,
 
   подлежащую подтверждению.
 
 
        Начальным состоянием является /NOINSTRUCTION.
 
 
   /SYMBOLS
 
   /NOSYMBOLS
 
 
        контролируют, чтобы ячейки воспроизводились как услов-
 
   ные имена или символы, а не как числовые адреса.
 
 
        Начальным состоянием является /SYMBOLS.
 
 
   /GLOBALS
 
   /NOGLOBALS
 
 
        контроллируют,чтобы символьные записи использовались в
 
   качестве первого или последнего условного имени в  последо-
 
   вательности поиска.
 
 
        Начальным состоянием является /NOGLOBALS.
 
 
   /SCOPE
 
   /NOSCOPE
 
 
 
                            - 188 -
 
                         00152-01 33 05
 
 
        контролируют, чтобы приставка 'SCOPE' к условному име-
 
   ни использовалась для поиска указанной ячейки.
 
 
        Начальным состоянием является /SCOPE.
 
 
        Пример.
 
   PATCH> VERIFY/ASCII/NOSYMBOLS 6FF = 'RAIN'
 
   OLD:   000006FF:   'RAIN'
 
 
        Команда VERIFY подтверждает, что текст RAIN в символь-
 
   ном коде находится в ячейке  6FF.  Квалификатор  /NOSYMBOLS
 
   требует, чтобы ячейка 6FF  воспроизводилась,  как  действи-
 
   тельный адрес в выражениях текущего основания.
 
 
 
 
                    11. СООБЩЕНИЯ ОБ ОШИБКАХ
 
 
 
 
        В случаях, когда подается некорректная команда  PATCH,
 
   программа PATCH реагирует  воиспроизведением  описательного
 
   сообщения об ошибке. Все сообщения об ошибках сообщаются  в
 
   SYS$ERROR и SYS$OUTPUT. Сообщения об ошибках также  записы-
 
   ваются в  журнальный  файл,  соответствующий  исправляемому
 
   файлу образов. Это позволяет проверять все команды, которые
 
   использовались при исправлении файла образов.
 
 
        Сообщения об ошибках разделяются на четыре  категории:
 
   информационные  сообщения,   предупредительные   сообщения,
 
   сообщения о грубых ошибках и сообщения о фатальных ошибках.
 
   Эти категории разделяются по  уровням  серьезности  ошибок.
 
   Когда обрабатываются командные процедуры,  программа  PATCH
 
   немедленно прекращает работу и  прерывает  процедуру,  если
 
   она содержит ошибки более высокого уровня, чем информацион-
 
 
                            - 189 -
 
                         00152-01 33 05
 
 
   ное сообщение. В течение интерактивного сеанса PATCH преры-
 
   вает работу только при обнаружении фатальной ошибки. Формат
 
   сообщения об ошибке:
 
 
              $устройство-L-TTTTT, сообщение
 
 
        где $устройство - имя устройства, выдающего  сообщение
 
   об ошибке. В большинстве  случаев  этим  устройством  будет
 
   являться PATCH.
 
 
        L - уровень серьезности ошибки. Могут быть такие уров-
 
   ни:
 
 
         I - информационное сообщение;
 
         W - предупредительное сообщение;
 
         E - сообщение о грубой ошибке;
 
         F - сообщение о фатальной ошибке.
 
 
        TTTTT - мнемоническое описание об ошибке.
 
 
        Сообщение  об  ошибке  воспроизводится  на   ошибочную
 
   команду PATCH.
 
 
        В оставшейся части этого раздела перечисляются и  опи-
 
   сываются сообщения об ошибках, выдаваемые программой PATCH.
 
   Сообщения об ошибках перечисляются  в  алфавитном  порядке,
 
   независимо от уровня серьезности. Это  допустимо  поскольку
 
   уровень серьезности для  конкретного  сообщения  об  ошибке
 
   может отличаться в зависимости от контекста, в  котором  он
 
   подается.
 
 
          BADECO, ILLEGAL ECO LEVEL OF NN IN FILE-SPEC
 
 
        указывает, что установленный уровень  есо  выбран  вне
 
 
 
                            - 190 -
 
                         00152-01 33 05
 
 
   допустимого диапозона  уровней  есо.  Законные  уровни  есо
 
   должны лежать в пределах от 1 до 128, включительно.
 
 
          BADIDENT, UNABLE TO PATCH IMAGE WITH IDENT OF NN
 
 
        указывает,  что  программа  PATCH  не  понимает  этого
 
   варианта файла образов. Следует перекомпоновать файл  обра-
 
   зов.
 
 
          BADOPCODE, OPCODE XX IS UNRECOGNIZED
 
 
        указывает, что подана инструкия, которую PATCH не рас-
 
   познает. Следует заметить, что PATCH не принимает  сокраще-
 
   ний для инструкций. Например, нельзя заменить ADDL2  сокра-
 
   щением ADDL.
 
 
          BADSCP, SCOPE SETTING NOT MODULE OR ROUTINE
 
 
        указывает,  что  установленный  символ,   обозначающий
 
   новое значение области действия, не является именем  модуля
 
   или именем программы.
 
 
          BRTOOFAR, DESTINATION ADDR IS TOO FAR FOR
 
          BRANCH OPERAND
 
 
        указывает, что относительное смещение  для  инструкций
 
   ответвляющего типа не является  достаточно  большим,  чтобы
 
   достичь установленного пункта назначения.
 
 
          CLIERR, CLI ERROR PARSING COMMAND LINE
 
 
        указывает, что  некорректно  введена  цепочка  команд,
 
   включающая PATCH; ввести команды корректно.
 
 
          CLSERR, CLOSE ERROR CODE OF XX ON FILE FILE-SPEC
 
 
 
                            - 191 -
 
                         00152-01 33 05
 
 
        указывает, что запрос не выполнен в  связи  с  ошибкой
 
   программы, представленной как хх.
 
 
          CNTERR, CONNECT ERROR CODE OF XX ON FILE FILE-SPEC
 
 
        указывает, что запрос см 1700 RMS $CONNECT не выполнен
 
   в связи с ошибкой программы, представленной как хх.
 
 
          CRMPSC, ERROR CODE OF XX MAPPING SECTION
 
 
        указывает, что запрос сервисной системы не выполнен  в
 
   связи с ошибкой программы, представленной как XX.
 
 
          DELTVA, ERROR CODE OF XX DELETING XXX TO  XXX
 
 
        указывает, что запрос  сервисной  системы  $DELTVA  не
 
   выполнен в связи с ошибкой  программы,  представленной  как
 
   XX.
 
 
          DIFVAL, MEMORY CONTAINS DIFFERENT VALUE THEN SPECIFI
 
 
        указывает, что установленное  значение  не  содержится
 
   внутри данной ячейки памяти.
 
 
          DIVZERO, ATTEMPT TO DIVIDE BY ZERO
 
 
        указывает, что предпринята попытка поделить на нуль.
 
 
          DUPCOMFIL, COMMAND FILE FILE-SPEC ALREADY BEING
 
          WRITTEN
 
 
        указывает, что уже эта командная процедура  затребова-
 
   лась для записи в этом сеансе работы PATCH.
 
 
          ECONOTSET, ECO LEVEL NN NOT SET IN FILE-SPEC
 
 
 
 
 
                            - 192 -
 
                         00152-01 33 05
 
 
        указывает, что установленный пользователем уровень ECO
 
   не соответствует данному  конкретному  файлу  образов.  Эта
 
   ситуация обычно возникает, когда подается команда CHECK ECO
 
   перед подачей команды UPDATE.
 
 
          ECOSET, ECO LEVEL NN ALREADY SET IN FILE-SPEC
 
 
        указывает, что установленный уровень ECO уже один  раз
 
   устанавливался в этом конкретном файле образов.
 
 
          ENDPRS, ERROR CODE OF XX ON COMMAND LINE PARSE END
 
 
        указывает, что обратный запрос интерпретатора  командд
 
   не выполнен из-за ошибки программы, представленной как XX.
 
 
          EXARANGE, INVALID RANGE OF ADDRESSES
 
 
        указывает, что пользователем установлен диапозон адре-
 
   сов с применением неправильного формата. Этим  неправильным
 
   форматом является:
 
 
          LOWWER-BOUNDARY-ADDRESS:UPPER-BOUNDARY-ADDRESS
 
          EXPREG, ERROR CODE OF XX EXPANDING PROGRAM REGION
 
 
        указывает, что запрос  сервисной  системы  $EXPREG  не
 
   выполнен из-за ошибки программы, представленной как хх.
 
 
          EXPSTKOVR, EXPRESSION TOO NESTED, STACK OVERFLOW
 
 
        указывает, что пользователем предпринята попытка  оце-
 
   нить изображение, которое содержит более 16 уровней.
 
 
          EXBIT, ILLEGAL EXTRACT BIT NUMBER-GREATHER THEN 31
 
 
        указывает, что  пользователем  установлен  невозможный
 
   номер бита; диапозон возможных номеров битов занимает  про-
 
 
                            - 193 -
 
                         00152-01 33 05
 
 
   межуток от 0 до 31, включительно.
 
 
           FRERANGE, STORAGE PACKAGE RANGE ERROR
 
 
        указывает  на  внутреннюю  ошибку  PATCH;   необходимо
 
   использовать журнал состояния математического обеспечения.
 
 
           FRESIZE, STORAGE PACKAGE SIZE ERROR
 
 
        указывает  на  внутреннюю  ошибку  PATCH;   необходимо
 
   использовать журнал состояния математического обеспечения.
 
 
           GBLONLY, CANNOT OBTAIN GLOBAL COPY OF IMAGE SECTION
 
           IMAGE-SECTION
 
 
        указывает, что образы, подлежащие исправлению,  содер-
 
   жат глобальную копию секции образов.  В  этой  части  файла
 
   образов не  содержится  локальной  копии.  Для  исправления
 
   подобной секции необходимо исправить разделяемый файл обра-
 
   зов, в котором она содержится.
 
 
            GBLWARN, PATCHING LOCAL COPY OF GLOBAL IMAGE
 
            SECTION IMAGE-SECTION
 
 
        указывает, что исправленный образ ссылается на  секцию
 
   глобального образа. Образ содержит локальную  копию  секции
 
   глобального образа и только эта локальная копия исправляет-
 
   ся.
 
 
            GETERR, READ ERROR CODE OF XX ON FILE FILE-SPEC
 
 
        указывает, что запрос $GET не  выполнен  из-за  ошибки
 
   программы, представленной как XX.
 
 
            GETTIM, ERROR CODE OF XX ON SGETTIM
 
 
 
                            - 194 -
 
                         00152-01 33 05
 
 
        указывает, что  запрос  сервисной  системы  $GETIM  не
 
   выполнен из-за ошибки программы, представленной каK XX.
 
 
            HDRBLK, TOO MANY ISD'S FOR IMAGE HEADER BLOCKS
 
 
        указывает, что запрошено  слишком  много  дескрипторов
 
   секций образа; PATCH не в состоянии создать область исправ-
 
   лений. Необходимо перекомпоновать файл образов.
 
 
            INITPRS, ERROR CODE OF XX ON COMMAND LINE PARSE IN
 
 
        указывает, что ошибка обратного запроса CLI связана  с
 
   ошибкой  программы,  представленной  как   XX.   Необходимо
 
   использовать журнал состояния математического обеспечения.
 
 
            INSOPRND, MISSING INSTRUCTION OPERAND
 
 
        указывает, что опущен один или несколько операндов  из
 
   инструкции.
 
 
            INSUFPA, NN BYTES REQUESTED, PATCH AREA AT ADDR
 
            CLPNTAINS NN BYTES
 
 
        указывает, что определенная пользователем область исп-
 
   равлений недостаточно велика для помещения указанной  прог-
 
   раммы. Для  исправления  ситуации  используется  переменная
 
   область исправлений, например, область исправления,  дейст-
 
   вующая по умолчанию. Обычно эта область расширена.
 
 
            INVCMD, INVALID COMMAND
 
 
        указывает, что команда либо опущена  либо  неправильно
 
   установлена.
 
 
            INVDSTREC, INVALID DST RECORD
 
 
 
                            - 195 -
 
                         00152-01 33 05
 
 
        указывает ошибку в таблице символов данного конкретно-
 
   го файла образов. Необходимо использовать журнал  состояния
 
   математического обеспечения.
 
 
            INVIMGHD, INCONSISTENT DEBUG AND SYMBOL DATA
 
            IN IMAGE HEADER
 
 
        указывает, что заголовок образа неполно описывает сим-
 
   вольную информацию.
 
 
            INVNUMBER, INVALID NUMERIC STRING
 
 
        указывает, что пользователем установлена цепочка  чис-
 
   ловых данных, невозможна для текущего контекста.
 
 
            INVOPR, UNRECOGNIZED OPERATOR IN EXPRESSION
 
 
        указыает,  что  выражение  содержит  вместо  оператора
 
   знак, не распознаваемый PATCH.
 
 
            INVQPRND, UNABLE TO RESOLVE OPERAND XX
 
 
        указывает, что пользователем  установлен  операнд,  не
 
   распознаваемый PATCH.  Операндам  таким  как  4(R0)  должно
 
   предшествовать в^, например, в^4(R0).
 
 
         INVQUO, QUOTED ARGUMENT NOT ALLOWED IN CURRENT MODE
 
 
        указывает, что совершена попытка ввести аргумент, зак-
 
   люченный в кавычках или апострофах, в то время как установ-
 
   лен режим NоINSTRUCTION и NOASCII.
 
 
         INVTOKEN, UNRECOGNIZED TOKEN SYMBOL-NAME
 
 
        указывает, что установленный пользователем  символ  не
 
   распознается программой PATCH, как имя команды или квалифи-
 
 
                            - 196 -
 
                         00152-01 33 05
 
 
   катор.
 
 
         JNLPUT, ERROR WRITING TO JOURNAL FILE
 
 
        указывает, что появилась ошибка на выходе, пока  PATCH
 
   писала журнальный файл.
 
 
    LONGDST,UNABLE TO INCLUDE ALL MODULE NAMES IN SYMBOL TABLE
 
 
        указывает, что при включении PATCH файл образов не мог
 
   включить все свои модули. Для определения модулей,  которые
 
   подлежат помещению в таблицу символов подается команда SHOW
 
   MODULE. Для освобождения места для новых  модулей  подается
 
   команда CANCEL MODULE, определяющая имя модулей, чьи симво-
 
   лы больше не требуются. Затем повторно подается команда SET
 
   MODULE.
 
 
         MEMBUG, DYNMEM ERROR SIZE=NN ADDR=NN ERROR=NN
 
 
        указывает внутреннюю ошибку PATCH; необходимо  исполь-
 
   зовать журнал состояния математического обеспечения.
 
 
         MISSQUO, UNMATCHED QUOTATION MARKS IN ARGUMENT
 
 
        указывает, что не использованы кавычки  или  апострофы
 
   для заключения в них аргумента.  PATCH  вносит  необходимые
 
   исправления для выполнения команды.
 
 
         MODIFYERR, MODIFY ERROR CODE OF XX ON FILE-SPEC
 
 
        указывает, что запрос СУД-32 $MODIFY не выполнен из-за
 
   ошибки в программе, представленной как XX.
 
 
    MODNOTADD,INSUFFICIENT SYMBOL TABLE SPACE TO ADD MODULE-NA
 
 
 
 
 
                            - 197 -
 
                         00152-01 33 05
 
 
        указывает, что команда SET MODULE  не  выполнена.  Это
 
   обычно происходит, когда не хватает места в таблице  симво-
 
   лов для включения дополнительного модуля . Для освобождения
 
   места для новых модулей подается команда  SHOW  MODULE,  по
 
   которой определяется какие модули заключены в таблице  сим-
 
   волов, а затем подается команда CANCEL MODULE, в соответст-
 
   вии с которой указываются имена  модулей,  символы  которых
 
   больше не  требуются.  Затем  снова  подается  команда  SET
 
   MODULE.
 
 
    MULTECO, MULTIPLE ECO LEVELS (NN AND NN) SET FOR ONE PATCH
 
 
        указывает, что произведена попытка  определить  второй
 
   уровень ECO до установки первого уровня ECO. Для  установки
 
   первого уровня ECO необходимо подать команду UPDATE.
 
 
         MULTOPR, MULTIPLE SUCCESSIVE OPERATORS IN EXPRESSION
 
 
        указывает, что введено  выражение,  содержащее  более,
 
   чем один оператор в последовательности.
 
 
         NOACCESS, CANNOT ACCESS IMAGE SECTION
 
 
        указывает, что установлен адрес, содержащийся в секции
 
   образа, не находящийся внутри файла образов.
 
 
         NOANGLE, UNMATCHED ANGLE BRACKETS IN EXPRESSION
 
 
        указывает, что введено выражение, содержащее не равное
 
   число правых и левых прямоугольных скобок.
 
 
         NOBRANCH, INSTRUCTION REQUIRES BRANCH-TYPE OPERAND
 
 
        указывает, что произведена попытка  ввести  инструкцию
 
   ответвляющего типа с недействительным  операндом  для  поля
 
 
                            - 198 -
 
                         00152-01 33 05
 
 
   пункта   назначения.   Например,   PATCH   не    принимает:
 
   DEPOSIT/INSTRUCTION GO='BNEQ RO'.
 
 
         NOCONTIG, NON-CONTIGUOUS IMAGE FILE BEING WRITTEN
 
 
        указывает, что выходной файл является  не  непрерывным
 
   файлом образов. Для обеспечения непрерывного выходного фай-
 
   ла после завершения работы  PATCH  необходимо  использовать
 
   команду DCL:
 
 
        $ COPY/CONTIGUOUS вход_файл выход_файл
 
         NODECODE, CANNOT DECODE INSTRUCTION
 
 
        указывает, что  PATCH  обнаружила  неопределенный  код
 
   операции или невозможный адрес, пытаясь декодировать  инст-
 
   рукцию.
 
 
         NOENCODE, CANNOT ENCODE INSTRUCTION INSTR
 
 
        указывает, что  инструкция  содержит  невозможный  код
 
   операции или операнд. Пункт назначения  ответвляющей  инст-
 
   рукции может оказываться недостижимым из ячейки, для  кото-
 
   рой она предназначена.
 
 
         NOFREE, NO FREE STORAGE AVAILABLE
 
 
        указывает внутреннюю ошибку PATCH. Необходимо  исполь-
 
   зовать журнал состояния математического обеспечения.
 
 
         NOGBL, SOME OR ALL GLOBAL SYMBOLS NOT ACCESSIBLE
 
 
        указывает, что при включении PATCH в  распоряжение  ее
 
   не было никакой глобальной символьной информации. Для обес-
 
   печения подвода глобальной символьной  информации  к  PATCH
 
   необходимо переассемблировать или  перекомпелировать  прог-
 
 
                            - 199 -
 
                         00152-01 33 05
 
 
   рамму, включая операцию исправления ошибок.
 
 
         NOLCL, IMAGE DOES NOT CONTAIN LOCAL SYMBOLS
 
 
        указывает, что при включении PATCH  никакой  локальной
 
   символьной информации в ее распоряжении не было. Для  обес-
 
   печения подвода локальной  символьной  информации  к  PATCH
 
   необходимо переассемблировать или  перекомпелировать  прог-
 
   рамму, включая операцию исправления ошибок.
 
 
         NOLITERAL, NO LITERAL TRANSLATION EXISTS FOR XX
 
 
        указывает, что числовое значение,  представленное  как
 
   XX не имеет символьного эквивалента, связанного с ним.
 
 
         NOPRND, MISSING OPERAND IN EXPRESSION
 
 
        указывает, что опущен один или несколько операндов  из
 
   выражения.
 
 
         NOPATAREA, INSUFFICIENT PATCH AREA AT ADDR,SIZE=NN
 
 
        указывает,  что  текущая  определенная   пользователем
 
   область исправлений недостаточно велика для помещения  дан-
 
   ной программы. Необходимо использовать область исправлений,
 
   используемую по умолчанию или другую, определенную  пользо-
 
   вателем область исправлений, больших размеров.
 
 
       NORELOC, RELOCATION OF CASE INSTRUCTIONS NOT SUPPORTED
 
 
        указывает, что PATCH не переместила автоматически CASE
 
   INSTRUCTIONS в область исправления.  Для  перемещения  CASE
 
   INSTRUCTIONS  в  область  исправления  с   помощью   команд
 
   DELETE/INSTRUCTION и DEPOSIT/INSTRUCTION PATCH_AREA необхо-
 
   димо использовать директиву .WORD ассемблера.
 
 
                            - 200 -
 
                         00152-01 33 05
 
 
         NORSTBLD, CANNOT BUILD SYMBOL TABLE
 
 
        указывает, что при включении PATCH выяснилось, что она
 
   не имеет достаточного пространства для  построения  таблицы
 
   символов.
 
 
         NOSUCHMODU, NO SUCH MODULE NAME MODULE-NAME
 
 
        указывает, что установлено имя модуля, не содержащего-
 
   ся в файле образов.
 
 
         NOSUCHSYM, NO SUCH SYMBOL
 
 
        указывает, что установлен символ,  не  содержащийся  в
 
   таблице символов PATCH.
 
 
         NOSYMBOL, NO SUCH SYMBOL SYMBOL-NAME
 
 
        указывает, что установлен символ,  не  содержащийся  в
 
   таблице символов PATCH.
 
 
     NOTALLSYM, UNABLE TO INITIALIZE SYMBOLS FOR DEFAULT MODUL
 
 
        указывает, что таблица символов не содержит достаточно
 
   места для включения символов для  всех  модулей,  нормально
 
   вводимых в таблицу в процессе выполнения в программу PATCH.
 
 
         NOTDONE, XX NOT YET A SUPPORTED FEATURE
 
 
        указывает, что выражение, используемое для введения  в
 
   PATCH, распознается ею, но не дифференцируется. Имя выраже-
 
   ния указывается в сообщении об ошибке.
 
 
         NOTPATAREA, PATCH AREA IS ADDR1 NOT ADDR2
 
 
        указывает, что  напечатан  неправильный  адрес  начала
 
 
 
                            - 201 -
 
                         00152-01 33 05
 
 
   области исправлений.  Для  определения  правильного  адреса
 
   начала области исправлений необходимо подать одну  из  сле-
 
   дующих команд: SHOW PATCH_AREA или ALIGN/BYTE.  При  подаче
 
   команды ALIGN/BYTE PATCH определяет имя как  текущий  адрес
 
   начала.
 
 
         NOTQUO, UNQUOTED ARGUMENT NOT ALLOWED IN ASCII OR
 
         INSTRUCTION MODES
 
 
        указывает,  что  при  работе  в  режимах   ASCII   или
 
   INSTRUCTION аргумент вводится не включаемый в апострофы или
 
   кавычки.
 
 
         NOUPDATE, NO PATCH FOR UPDATE QUALIFIER ECO LEVEL NN
 
 
        указывает, что при замене командной процедуры на режим
 
   интерактивной     или     пакетной      работы      (вводом
 
   PATCH/UPDATE=(ECO-LEVEL,N...)  )  устанавливается   уровень
 
   ECO, который не включен в командную процедуру.
 
 
         NSADDR, ADDRESS ADDR IS NOT WITHIN  IMAGE
 
 
        указывает, что установлен адрес, находящийся вне  диа-
 
   пазона адресов файла образов.
 
 
         NUMOPRNDS, XX INSTRUCTIONS MUST HAVE NN OPERANDS
 
 
        указывает, что опущен один операнд  из  инструкций  на
 
   языке МАCRO CM 1700. Необходимо повторить команду  PATCH  с
 
   правильным числом операндов.
 
 
         NUMTRUNC, NUMBER TRUNCATED
 
 
        указывает, что PATCH усекла запись числовых  данных  в
 
   связи с тем, что она превышала длину, установленную текущим
 
 
                            - 202 -
 
                         00152-01 33 05
 
 
   режимом длины.
 
 
         NUMVAL, ERROR CODE OF XX REQUESTING UPDATE VALUE
 
 
        указывает, что обратный запрос  интерпретатора  команд
 
   не выполнен в связи с ошибкой программы, представленной как
 
   XX.
 
 
         OLDINSCHK, MEMORY LOCATION ADDR NOT EQUAL TO XX
 
 
        указывает, что подтверждение содержания данного адреса
 
   не выполнено. Необходимо  повторно  подать  команду  PATCH,
 
   устанавливающую правильное значение.
 
 
         OLDVALCHK, MEMORY LOCATION ADDR NOT EQUAL TO XX
 
 
        указывает, что подтверждение содержания данного адреса
 
   не выполнено. Необходимо  повторно  подать  команду  PATCH,
 
   устанавливающую правильное значение.
 
 
         OPNERR, OPEN ERROR CODE OF XX ON FILE-SPEC
 
       
        указывает, что запрос не выполнен из-за  ошибки  прог-
 
   раммы, представленной как XX.
 
 
         OPRNDLNG, OPERAND XX TOO LONG FOR INTERNAL BUFFERS
 
 
        указывает  на  внутреннюю  ошибку  PATCH.   Необходимо
 
   использовать журнал состояния математического обеспечения.
 
 
         OPSYNTAX, INSTRUCTION OPERAND SYNTAX ERROR
 
 
        указывает, что имеется синтаксическая ошибка в операн-
 
   де внутри инструкции.
 
 
         OUTCMDLNG, OUTPUT COMMAND LINE TOO LONG FOR BUFFER
 
 
 
                            - 203 -
 
                         00152-01 33 05
 
 
        указывает  на  внутреннюю  ошибку  PATCH.   Необходимо
 
   использовать журнал состояния математического обеспечения.
 
 
         PARSEERR, INTERNAL PARSING ERROR
 
 
        указывает  на  внутреннюю  ошибку  PATCH.   Необходимо
 
   использовать журнал состояния математического обеспечения.
 
 
         PATERR, INTERNAL PATCH CODING ERROR
 
 
        указывает  на  внутреннюю  ошибку  PATCH.   Необходимо
 
   использовать журнал состояния математического обеспечения.
 
 
         PATHLONG, TOO MANY QUALIFIERS ON NAME
 
 
        указывает, что введено  условное  имя,  содержащее  15
 
   элементов.
 
 
         PRIMIN, ERROR CODE OF XX PARSING INPUT FILE
 
 
        указывает, что обратный запрос  интерпретатора  команд
 
   не выполнен из-за ошибки программы, представленной как XX.
 
 
         PRIMOUT, ERROR CODE OF XX PARSING JOURNAL FILE
 
 
        указывает, что обратный запрос  интерпретатора  команд
 
   не выполнен из-за ошибки программы, представленной как XX.
 
 
         PUTERR, PUT ERROR CODE OF XX FILE FILE-SPEC
 
 
        указывает, что ошибка записи указанного файла возникла
 
   в связи с ошибкой программы, представленной как XX.
 
 
          REDEFSYM, REDEFINING SYMBOL SYMBOL-NAME FROM ADDR1
 
                   TO ADDR2
 
 
 
 
 
                            - 204 -
 
                         00152-01 33 05
 
 
        указывает, что определенный пользователем  символ  был
 
   изменен на другое значение.
 
 
      REPLACEERR, REPLACEMENT VALUE TOO LARGE FOR LOCATION
 
 
        указывает, что при замене  данных  с  помощью  команды
 
   REPLACE новые данные содержат больше байтов, чем старые.
 
 
         RESOPCODE, OPCODE XX IS RESERVED
 
 
        указывает,  что  установлен  код   операций,   который
 
   является зарезервированным.
 
 
         SECOUT, ERROR CODE OF XX PARSING JOURNAL FILE
 
 
        указывает, что обратный запрос  интерпретатора  команд
 
   не выполнен из-за ошибки программы, представленной как XX.
 
 
         STGTRUNC, STRING TRUNCATED
 
 
        указывает, что программа PATCH усекла цепочку записи в
 
   символьном коде поскольку она либо превышала  длину,  уста-
 
   новленную текущим режимом длины, либо была неприемлима  для
 
   контекста, которому предназначалась.
 
 
         SYNTAX, COMMAND SYNTAX ERROR AT OR NEAR XX
 
 
        указывает,  что  неправильно  введена  часть   цепочки
 
   команд, представленной как XX.
 
 
         TEROUT, ERROR CODE OF XX PARSING COMMAND FILE 
 
 
        указывает, что обратный запрос  интерпретатора  команд
 
   не выполнен из-за ошибки программы, представленной как XX.
 
 
          UPDATE, PATCH WITH ECO LEVEL NN IGNORED DUE TO
 
 
 
                            - 205 -
 
                         00152-01 33 05
 
 
              UPDATE QUALIFIER
 
 
        указывает, что  PATCH  игнорировала  все  исправления,
 
   связанные с определенным уровнем ECO,  поскольку  использо-
 
   вался квалификатор /UPDATE, не включавший  этот  конкретный
 
   уровень ECO в перечне своих значений.
 
 
         WRTFIL, UPDATING IMAGE FILE FILE-SPEC
 
 
        указывает, что данный файл образов уже обновлялся  для
 
   включения предыдущего исправления.
 
 
 
 
 
 
                            - 206 -
 
                         00152-01 33 05
 
 
                                                   Приложение
 
 
 
 
 
                        Обобщение команд
 
 
 
 
 
        В данном приложении перечисляются в алфавитном порядке
 
   все команды программы PATCH с указанием требуемого формата,
 
   употребляемых с каждой командой  квалификаторов  и  кратким
 
   описанием функций команды ( таблица ).  Латинскими  буквами
 
   напечатанные знаки, которые должны вводиться,  чтобы  PATCH
 
   распознавала имя команды и квалификатора.
 
 
                                                          Таблица 1
                     Команды программы PATCH
 
      -------------------------------------------------------------
                                     !
               Формат                !         Функции
                                     !
      -------------------------------------------------------------
      ALIGN   /выравнивающий символ  !Выравнивает текущую область
              /BYTE, /WORD, /LONG,   !исправлений на заданной гра-
              /QUAD, /PAGE           !нице и присваивает символ
                                     !этому адресу
                                     !
      CANCEL MODE                    !Вычеркивает текущие режимы и
                                     !востанавливает режимы на-
                                     !чального состояния
                                     !
      CANCEL MODULE имя-модуля[,...] !Перемещает локальные символы,
                                     !определенные в одном или не-
                                     !скольких заданных модулях,
                                     !на таблицы символов PATCH
                                     !
      CANCEL   PATCH_AREA            !Прекращает использование
                                     !текущей области исправлений
                                     !восстанвливает использо-
                                     !вание области исправлений
                                     !начального состояния
                                     !
      CANCEL SCOPE                   !Вычеркивает текущую символь-
                                     !ную область действия и воз-
                                     !вращает к " нулевой"
                                     !области действия
                                     !
      CHECK ECO уровень[:...],[,...] !Подтверждает внесение ис-
 
 
                            - 207 -
 
                         00152-01 33 05
 
 
                                                Продолжение табл. 1
      -------------------------------------------------------------
                                     !
               Формат                !         Функции
                                     !
      -------------------------------------------------------------
                                     !правлений, связанных с за-
                                     !данными уровнями есо
                                     !
      CHECK     NOT ECO уровень[:...]!Подтверждает, что заданные
                               [,...]!уровни еCO доступны к ис-
                                     !пользованию
                                     !
      CREATE [спец.файла]            !Создает командную процедуру.
                                     !все последующие выполненные
                                     !команды записываются в этот
                                     !файл
                                     !
      DEFINE символ=значение[,...]   !Присваивает символу значе-
                                     !ние. Может быть несколько
                                     !присвоений
                                     !
      DELETE  /квал.-режим. Яч.=тек.сод.[,...]
              /BYTE, /WORD, /LONG    !Подтверждает текущее содер-
              /OCTAL, /DECIMAL,      !жание одной или нескольких
              /HEXADECIMAL,/[NO]ASCII!соседних ячеек. Затем заме-
              /[NO]INSTRUCTION,      !няет это содержимое инстру-
              /[NO]GLOBALS,/[NO]SCOPE!кциями NOP или нулями
              /[NO]SYMBOLS           !
                                     !
      DEPOSIT /квал.-режим. /доп.квал. Яч.=нов.содер.
              /BYTE, /WORD, /LONG    ! 1) помещает новое содержа-
              /OCTAL, /DECIMAL       ! ние в одну или несколько
              /HEXADECIMAL,/[NO]ASCII! соседних ячеек
              /[NO]INSTRUCTION       ! 2) помещает новое содержа-
              /[NO]GLOBALS,/[NO]SCOPE! ние в одну или несколько
              /[NO]SYMBOLS           ! соседних ячеек в текущей
              /PATCH_AREA            ! области исправлений. Ис-
                                     ! пользуется PATCH_AREA
                                     !
      EVALUTE        /квал.-режим. Выражение[,...]
              /BYTE, /WORD, /LONG    ! Воспроизводит текущее опре-
              /OCTAL, /DECIMAL       ! деление или нескольких
              /HEXADECIMAL,/[NO]ASCII! выражений
              /[NO]INSTRUCTION       !
              /[NO]GLOBALS,/[NO]SCOPE!
              /[NO]SYMBOLS           !
                                     !
      EXAMINE /квал.-режим. Яч.[:яч.],[,...]
              /BYTE, /WORD, /LONG    ! Воспроизводит содержимое
              /OCTAL, /DECIMAL       ! одной или нескольких ячеек
              /HEXADECIMAL,/[NO]ASCII!
              /[NO]INSTRUCTION       !
              /[NO]GLOBALS,/[NO]SCOPE!
              /[NO]SYMBOLS           !
                                     !
      EXIT                           ! 1) прекращает цепочку под-
                                     ! сказок в командах;
                                     ! 2) прекращает цикл работы
 
 
                            - 208 -
 
                         00152-01 33 05
 
 
                                                Продолжение табл. 1
      -------------------------------------------------------------
                                     !
               Формат                !         Функции
                                     !
      -------------------------------------------------------------
                                     ! PATCH
                                     !
      INSERT         /квал.-режим. Яч.=тек.-инстр.
      нов.инстр.                     ! Подтверждает текущее содер-
         .                           ! жание ячейки, затем вводит
         .                           ! одну или несколько символь-
         .                           ! ных инструкций за этой
              /OCTAL, /DECIMAL       ! ячейкой
              /HEXADECIMAL           !
              /INSTRUCTION           !
              /[NO]GLOBALS,/[NO]SCOPE!
              /[NO]SYMBOLS           !
                                     !
      REPLACE /квал.-режим. Яч.=тек.-содер.[,...]
      новое содер.                   !Подтверждает содержимое
           /BYTE, /WORD, /LONG       !одной или нескольких сосед-
           /OCTAL, /DECIMAL          !них ячеек, а затем заменяет
           /HEXADECIMAL,/[NO]ASCII   !это содержимое новым
           /[NO]INSTRUCTION          !
           /[NO]GLOBALS,/[NO]SCOPE   !
           /[NO]SYMBOLS              !
                                     !
      SET ECO уровень                !Oпределяет уровень есо для
                                     !вносимого исправления. Уро-
                                     !вень есо не устанавливается
                                     !до тех пор, пока не подает-
                                     !тся команда UPDATE
                                     !
      SET MODE парам.-реж.[,...]     !Устанавливает один или не-
                                     !сколько новых режимов ввода
                                     !и воспроизведения
                                     !
     SET MODULE имя-модуля[,...]     !Вводит локальную символьную
              /ALL                   !информацию, определенную в
                                     !одном или нескольких задан-
                                     !ных модулях, в таблицу сим-
                                     !  волов PATCH
                                     !
      SET PATCH_AREA адр.-дескриптора!Устанавливает определенную
                                     !пользователем область ис-
                                     !правлений в качестве теку-
                                     !щей области исправлений
                                     !
      SET SCOPE имя-модуля\имя-прогр.[\...]
                                     !Определяет текущую символь-
                                     !ную область действия
                                     !
      SHOW MODE                      !Воспроизводит установку
                                     !текущих режимов
                                     !
      SHOW MODULE                    !Воспроизводит все модули в
                                     !образе, которые подлежат
                                     !исправлению и воспроизводит
 
 
                            - 209 -
 
                         00152-01 33 05
 
 
                                                Продолжение табл. 1
      -------------------------------------------------------------
                                     !
               Формат                !         Функции
                                     !
      -------------------------------------------------------------
                                     !локальные символы, содер-
                                     !жащиеся в этих модулях,
                                     !доступные для использования
                                     !
      SHOW PATCH_AREA                !Воспроизводит дескриптор
                                     !текущей области исправлений
                                     !
      SHOW SCOPE                     !Воспроизводит текущую сим-
                                     !вольную область действия
                                     !
      VERIFY         /квал.-режим. Яч.=тек.-содер.[,...]
              /BYTE, /WORD, /LONG    !Потверждает содержимое одной
              /OCTAL, /DECIMAL       !или нескольких соседних
              /HEXADECIMAL,/[NO]ASCII! ячеек
              /[NO]INSTRUCTION       !
              /[NO]GLOBALS,/[NO]SCOPE!
              /[NO]SYMBOLS           !
                                     !
      UPDATE                         !Устанавливает уровень есо и
                                     !вносит исправление в файл
                                     !образа
 
 
 
 
 
 
 
 
 
 
 
                       -210K-  
  
                    00152-01 33 05  
 
  ------------------------------------------------------------
  I                                                          I
  I                  Лист регистрации изменений
  I                                                          I
  I----------------------------------------------------------I
  IНомера листов (страниц)IВсего IN     IВходящий IПодп.IДатаI
  I-----------------------IлистовIдоку- IN сопро- I     I    I
  IИ IИз- IЗа- IНо- IАнну-I(стра-Iмента Iводитель-I     I    I
  Iз Iме- Iме- Iвых Iлиро-Iниц   I      Iного до- I     I    I
  Iм Iнен-Iнен-I    Iван- Iв до- I      Iкум. и   I     I    I
  I. Iных Iных I    Iных  Iкум.  I      Iдата     I     I    I
  I----------------------------------------------------------I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
  I  I    I    I    I     I      I      I         I     I    I
 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!