13. ЗАПЛАТА НА РУБАШКУ,
или
Программа PATCH

       — Добрый день,— обращаясь ко всем, сказал Алеша, входя в машинный зал.
       Алеша уже приходит в ВЦ, как на работу, и не только в те дни, когда мы изучали операционную систему, но и в свободное время для приобретения практических навыков в применении ЭВМ при подготовке текстов. За красиво оформленные с помощью программы DOC сочинения я уже получал выговоры от его учительницы литературы и русского языка. Но надеюсь, что эта книга поможет понять полезность такого рода человеческой деятельности. Алеша готовит с помощью редактора текста и форматера все свои доклады и сообщения по школьным предметам, а также помогает в работе вычислительного центра.
       — Андрей Германович,— Алеша разыскал меня,— здравствуйте, а у меня еще есть вопросы.
       — Здравствуй, Алеша! Задавай свои почемучки.
       — Не почемучки, а зачемучки,— передразнил Алеша,— мы переписывали программу PATCH, а ничего про нее не говорили. Зачем она нужна?
       — Да, Алеша,— отвечаю я,— нам "не повезло". У нас и диски не портились, и символ CTRL/O в текстовой файл не попадал. Но даже если мы не программисты, то программа PATCH нам может пригодиться.
       PATCH в переводе означает "заплата". И как можно догадаться — это редактор двоичных файлов, т.е. с его помощью можно исправлять любые двоичные массивы, расположенные на устройствах файловой структуры с произвольным доступом. Если быть более точным, то все операции с программой PATCH похожи на операцию лазерным скальпелем в собственном глазу, и необходимо помнить об этом.
       Один из первых случаев, когда пользователь может обратится к этой программе, — это перестроить системные часы.
       — Как,— удивился Алеша,— разве системные часы так просто перестроить. Я всегда замечал, что они отстают примерно на 15%. Как я понимаю, это связано с разной частотой питающей сети, от которой работает таймер. На американском континенте она равна 60гц, а в Европе — 50гц.
       — Ты очень наблюдательный,— говорю я,— но у нас хорошая система. И часы можно исправить за одну минуту. Для этого достаточно в ячейке 300 (восьмеричное) от начала резидентного монитора в пятом бите установить единицу, или попросту записать число 40 (восьмеричное). Чем мы и займемся.
       Клавиатурный монитор не поддерживает программу PATCH. Поэтому вызвать ее необходимо, как обычную программу пользователя. Но как определить, где начинается в файле RT11SJ.SYS резидентный монитор. Система построена так, что независимо от построения монитора (и независимо от его типа XM, FB, SJ и др.) в его середине найдется блок, который начинается с чисел 000167, ХХХХХХ, 000000 и далее большое количество нулей, а с адреса 304 магические числа 177560, 177562, 177564, 177566, которые представляют собой адреса системного терминала (хотя в редких случаях они могут быть другими).
       Вот где помогла нам программа DUMP и, запомнив номер блока файла, начинаем работать скальпелем.
       У нас одна из старших версий системы (V5.1), поэтому мы можем просто набрать команду:

  +---------------
  !  .PATCH SY:RT11SJ.SYS<ВК>
  !  -
  !    FILE NAME --
  !    ------------
  !  *^

!

либо для младших версий

  +---------------
  !  .RUN SY:PATCH<ВК>
  !  -
  !    FILE NAME --
  !    ------------
  !  *SY:RT11SJ.SYS<ВК>
  !  -
  !  *^
  !

       Номер блока и адрес ячейки в блоке мы знаем, поэтому можем продолжить диалог. Но сначала о языке. Язык команд программы PATCH является расширенным языком отладчиков и пультовых терминалов фирмы DEC. Его можно смело использовать в пультовом режиме ЭВМ "Электроника-60" и ДВК. Принятая фирмой DEC стратегия требует — прежде, чем записать какое-либо число в ячейку, ее нужно открыть, прочитав при этом содержимое. Сделать это можно командой.

  +---------------
  !  *36300/ 000000 40<ВК>
  !  -      --------
  !  *^C^C
  !  -
  !

       И оборвав работу программы вводом символа CTRL/C и перезагрузив систему, мы можем убедиться, что изменения в файле не прошли даром, и если подождем некоторое время, то убедимся, что часы теперь идут правильно.
       — И все так просто,— воскликнул Алеша,— и таким образом можно исправить любой файл и, наверное, любое место на томе.
       — Конечно,— отвечаю я,— но мы допустили некоторые ошибки, поэтому сразу их укажем, а заодно и ключи программы PATCH.

 

13.1. Правильный вход и ключи

       Как вызвать программу, мы уже показали. Теперь отметим лишь некоторые особенности.
       Программа PATCH делает изменения непосредственно в файле (в нашем "глазу"), поэтому входной файл одновременно является и выходным. По умолчанию считается, что исправляемый файл представлен в формате SAV и, соответственно, имеет тип .SAV. Однако если у нас специальный файл (например, состоящий только из нулей), системный файл — монитор или драйверы — или же непосредственно блоки на томе, например каталог тома, то необходимо об этом сказать программе с помощью ключа /A. Соответственно, если мы хотим работать с абсолютными блоками тома в качестве спецификации файла, нужно указать только имя устройства. Если мы хотим вносить изменения в оверлейную программу, то при вызове программы PATCH желательно указать ключ /O.
       Кроме того, у программы PATCH есть еще два ключа, которые могут помочь в работе, если мы хотим проконтролировать свои действия, используя контрольную сумму. Для ее получения необходимо сложить все коды, имеющиеся в файле, и игнорировать перенос в старший разряд. Получившееся число может помочь отличить один файл от другого. Это же справедливо и для исправлений, которые мы вносим.
       Ключ /C — CHEKSUM проверяет нашу работу. Фирма DEC использует его следующим образом.
       Когда ее разработчики вносят изменения для улучшения работы системы, они одновременно подсчитывают контрольную сумму изменений. И при посылке своим клиентам сообщения о необходимых изменениях, они также сообщают эту контрольную сумму. Когда изменения вносятся и указан ключ /C, то программа PATCH в конце работы спрашивает правильное значение контрольной суммы.
       Программа PATCH, сравнив свою подсчитанную сумму с введенной нами контрольной суммой, не укажет место, где мы ошиблись, но даст знать, что мы должны проверить свою работу.
       А если мы не знаем контрольную сумму? Не вручную же разработчики ее считают? Для того чтобы узнать контрольную сумму внесенных нами изменений, достаточно указать ключ /D, и программа PATCH сообщит ее в конце работы.

 

13.2. Команды

       Первые команды, которые мы должны узнать, — это, как правильно завершить работу с программой. Так, как мы делали до сих пор, — это слишком грубо.
       Если мы редактировали только один файл и больше не хотим ничего делать, то нужно в ответ на звездочку ввести символ "E" — Exit. Но если у нас работы много и один файл сменяется другим, то, указав в ответ на звездочку каманду "F" — Files, мы можем завершить работу с одним файлом, а программа PATCH запросит имя следующего файла.
       Для работы с ячейками есть общие правила, которые соблюдаются и в других подобных программах фирмы DEC.
       Для открытия ячейки как 16-ти разрядного слова используется символ "/" — SLASH или "косая черта". Если же вместо него использовать символ "\" — BACKSLASH или "обратная косая черта", то эта ячейка и все последующие будут открыты как 8-ми разрядный байт.
       Для закрытия ячейки и, соответственно, внесения в нее изменений используется также ряд команд.
       Самым естественным образом после ввода нового кода нажать клавишу <ВК> и тем самым закрыть ячейку. Но тогда для того, чтобы открыть новую ячейку, нужно снова набирать ее адрес.
       Если для закрытия ячейки использовать символ <ПС>, то текущая ячейка будет закрыта и откроется следующая. Она будет открыта, как слово или байт, в зависимости от того, как открывалась первая ячейка в этой последовательности.
       Можно и наоборот. Если использовать для закрытия ячейки символ "^" (на клавиатуре ЙЦУКЕН он находится в нижнем ряду слева на одной клавише с символом Ч), то текущая ячейка закроется и откроется предыдущая. Это позволяет вовремя исправить замеченную ошибку.
       Кроме того, в открытой ячейке может содержаться адрес, в который необходимо вносить исправления. Например, индексные указатели таблиц. В таком случае ввод символа "@" закрывает текущую ячейку и открывает другую, считая содержимое текущей адресом новой, подлежащей редактированию.
       В принципе уже этих команд достаточно для внесения изменений в файлах и томах. Но очень неудобно символы, представленные в ASCII или RADIX-50, вручную переводить в коды.

 

13.3. Редактирование символьных кодов

       Когда мы рассматривали кодировки символов, то обратили внимание, что коды ASCII и КОИ-7Н2 отличаются лишь тем, что вместо строчных латинских букв отображаются прописные русские. Первое неудобство возникает, когда программа фирмы DEC на отечественном терминале выводит английское сообщение русскими буквами, превращая его в несуразицу. Это легко исправить, потому что сообщение находится где-то в файле программы и найти его можно с помощью программы DUMP. А дальше — можно поступить так:
       — открыть первую ячейку (как слово или байт безразлично) и после индикации программой PATCH содержимого ячейки ввести команду "A", которая преобразует его в символы ASCII. Если ячейка открывалась как слово, то символов будет два. Непечатные символы заменяются знаком "?";
       — для ввода новых символов (латинские, как мы хотели) нужно дать команду "C" — CHANGE (замена), которая сразу напечатает открывающую скобку. После чего, мы должны ввести новые символы (один или два). При закрытии ячейки закроется и скобка. Если русский перевод сообщения не превышает по длине английский, то можно заменить это сообщение на его русский эквивалент. Именно таким образом "разрабатывались" операционные системы РАФОС и ФОДОС.
       Например, мы тоже можем исправить программу DUMP так, чтобы она вместо слов "BLOCK NUMBER" печатала "НОМЕР БЛОКА". Для этого запускаем программу PATCH и

  +---------------
  !  .PATCH SY:DUMP.SAV<ВК>
  !  -
  !  FILE NAME --
  !  ------------
  !  *3631\ 102 A = B C (Н) <ПС>
  !  *3632\ 114 A = L C (О) <ПС>
  !  *3633\ 117 A = O C (М) <ПС>
  !  *3634\ 103 A = C C (Е) <ПС>
  !  *3635\ 113 A = K C (Р) <ПС>
  !  *3636\ 40  A =   C ( ) <ПС>
  !  *3637\ 116 A = N C ( ) <ПС>
  !  *3640\ 125 A = U C (Б) <ПС>
  !  *3641\ 115 A = M C (Л) <ПС>
  !  *3642\ 102 A = B C (О) <ПС>
  !  *3643\ 105 A = E C (К) <ПС>
  !  *3644\ 122 A = R C (А) <ПС>
  !  *3645\ 40  A =    <ПС>
  !  *3646\ 40  A =    <ПС>
  !  *3647\ 0 <ВК>
  !  *E
  !  .^
  !

       Для символов RADIX-50 ситуация та же. Но для перевода содержимого слова в символы используется команда "X", а для ввода нового значения команда "P". Следует отметить, что в одном слове упаковывается по три символа в коде RADIX-50.
       Частные случаи редактирования символьных кодов предусмотрены фирмой DEC. Например, редактор KED по умолчанию ищет тип файла .MAC, т.е. программу на MACRO-11. Это удобно для программистов.
       — Но ведь я не программист,— замечает Алеша,— пока я только писатель и мне более удобен тип файла по умолчанию .DOC.
       — Вот именно,— подтверждаю я,— для того, чтобы пользователь сам мог установить для себя удобные значения, фирма DEC сообщает адреса необходимых ячеек, поставляя вместе с операционной системой файл CUSTOM.TXT. Прочитав этот файл (а еще лучше его сразу распечатать), можно узнать, какие параметры в программах можно менять. Например, для изменения типа файла по умолчанию у редакторов /KED/K52/KEX эти адреса следующие:

   для  RT-11 V5.1   для  RT-11 V5.4
   ..EEXT = 002352   ..EEXT = 002372  ; для KED
   ..EEXT = 002252   ..EEXT = 002272  ; для K52
   ..EEXT = 001312   ..EEXT = 001310  ; для KEX

       — Вот я и исправлю тип файла,— заторопился Алеша,— у своего редактора:

  +---------------
  !  .PATCH SY:KED.SAV/D<ВК>
  !  -
  !  FILE NAME --
  !  -------------
  !  *2372/ 50553 X = MAC P (DOC) <ВК>
  !  -     ------- ------- --   --
  !  *E
  !  -
  !  ?PATCH-I-CHECKSUM = 16657
  !  -------------------------
  !  .^
  !

       И я напомню читателям,— объясняет Алеша свои действия,— что подчеркнутые символы на этом рисунке выводит программа PATCH.

 

13.4. Команды для программистов

       Для удобства изменений в программных модулях можно запомнить любой адрес ячейки в файле в некотором виртуальном регистре и далее использовать его содержимое для всех остальных смещений. Таких регистров может быть восемь — от 0 до 7. Запись базового значения, например, во второй регистр происходит следующей командой:

  +---------------
  !  *10200;2R<ВК>
  !  *

и затем для открытия ячейки 10213 можно просто указать

  !
  !  *2,13\010105 111<ВК>
  !  *

       Таким образом можно открыть ячейку в оверлейном сегменте командой

    S:R,O/

       где S — номер оверлейного сегмента, R — номер базового регистра (как в предыдущем примере), O — смещение относительно содержимого базового регистра.
       — Необходимо отметить,— подсказывает Алеша,— что этой программой можно исправлять каталоги после каких-либо аварий, так же как мы исправляли редактор KED, но указав при вызове дополнительно ключ /A.

(c) 1992г Архангельский Андрей Германович




Поддержите культуру
ЯндексЯндекс. ДеньгиХочу такую же кнопку

Google
 
Web azdesign.ru az-libr.ru


Дата последнего изменения:
Wednesday, 23-Oct-2013 09:02:54 UTC