Здравствуйте, уважаемые хабарчане!
Почти неделю назад я написал свой первый пост о VM/370. Первым комментарием к нему было совершенно справедливое замечание:
Да, действительно, туториал по установке мягко говоря устаревшей ОС интересен только в общепознавательном плане как демонстрация ее возможностей. А вот описание принципов работы с цитатами из исходников — другое дело. Тем более, что исходники доступны. Проблема только в том, что подобное описание — дело серьезное.
Принципы работы VM/370 описаны в этом трехтомнике. Сам исходный код — сравнительно небольшой, «всего» двести тысяч строк на ассемблере — CP и примерно столько же — CMS. Но работа все равно предстоит капитальная.
В этой статье я не ставлю перед собой задачу даже начать цикл о внутренностях VM/370. Я только объясню как я извлек исходный код VM/370 в читабельном формате. В процессе извлечения я узнал кое-что интересное про работу с VM/370.
Объем ленты с исходниками — около тридцати мегабайт. Будучи совершенно уверенным что файлы хранятся на ленте в несжатом виде, я просто разделил этот объем на емкость цилиндра 3330 и вычислил, что для сохранения всех исходников мне понадобиться 130 цилиндров. Потом это конечно оказалось не так (видимо, какое-то сжатие все-таки происходит, размер распечаток — ок. 40 мегабайт), но к счастию лента состояла из нескольких томов, и я просто распечатал их один за другим.
Итак, добавим в каталог, в описание пользователя MAINT, строку:
Примечание: весь процесс я выполнял под пользователем MAINT. Вообще говоря, это — злостное нарушение правила «не работай под рутом» и так делать нельзя.
Запустим VM, залогинимся как MAINT, запустим CMS. введем перфокарты с описанием каталога и обновим его командой «DIRECT MYVM». Перелогинимся (чтобы изменения учетной записи вступили в силу). Подключим диск 192 (командой «access 192 b») и ленту с исходниками. Загрузим первый том архива (исходники CP) командой «VMFPLC2 LOAD * * B».
Я долго не мог найти способ распечатать несколько файлов одной командой. Дело в том, что команды PRINT и PUNCH ругаются на звездочки в имени файла. А печатать пятьсот штук файлов вручную что-то не хотелось. В конце-концов я решил, что проще всего будет написать программу распечатки на ассемблере, но роясь в мануалах по ассемблеру, нашел более легкий способ.
У команды LISTFILE (аналог DIR/ls) есть опция (EXEC. Если запустить LISTFILE с этой опцией, LISTFILE создаст файл (файлы EXEC — это аналог bat/sh), со строками вида &1 &2 . &1 &2 — это параметры скрипта.
Теперь внимание! При запуске команды CMS PUNCH, в каждой строке файла CMS EXEC вместо &1 будет подставлен PUNCH, а затем строка выполнена. По-моему, это самое лучшее решение инженеров IBM в области пользовательского интерфейса (хотя и ненужное в Linux при наличии awk).
Я поэкспериментировал с различными распечатками и решил, что PUNCH лучше чем PRINT.
Примечание: геркулесовский вывод перфокарт настроен на формат EBCDIC. Чтобы получить читабельный код, надо перенастроить его на ASCII командой «ATTACH D ./sources/DMK.txt ascii».
Итак, создаем список файлов:
И выводим их:
Уже когда все закончилось, я догадался, что имело смысл добавить в CMS EXEC первую строчку &CONTROL OFF (аналог echo off). Да, не застал я не то что VM/370, но даже и элементарный MS-DOS.
В результате предыдущих манипуляций, я получил файл DMK.txt со склеенными вместе исходниками. Теперь их надо разделить. Для этого я применил такой скрипт на awk:
Прошу прощения за г-код, писалось на коленке и не с целью читабельности/эффективности.
Почти неделю назад я написал свой первый пост о VM/370. Первым комментарием к нему было совершенно справедливое замечание:
Весело, конечно, но «полотно» состоит в основном из выводов команд. Если честно, гораздо интереснее прочитать не только про саму установку системы, но и про её «кишки», как, что, да почему.
Исследовать исходники VM/370, к примеру.
Да, действительно, туториал по установке мягко говоря устаревшей ОС интересен только в общепознавательном плане как демонстрация ее возможностей. А вот описание принципов работы с цитатами из исходников — другое дело. Тем более, что исходники доступны. Проблема только в том, что подобное описание — дело серьезное.
Принципы работы VM/370 описаны в этом трехтомнике. Сам исходный код — сравнительно небольшой, «всего» двести тысяч строк на ассемблере — CP и примерно столько же — CMS. Но работа все равно предстоит капитальная.
В этой статье я не ставлю перед собой задачу даже начать цикл о внутренностях VM/370. Я только объясню как я извлек исходный код VM/370 в читабельном формате. В процессе извлечения я узнал кое-что интересное про работу с VM/370.
Распаковка ленты в CMS
Объем ленты с исходниками — около тридцати мегабайт. Будучи совершенно уверенным что файлы хранятся на ленте в несжатом виде, я просто разделил этот объем на емкость цилиндра 3330 и вычислил, что для сохранения всех исходников мне понадобиться 130 цилиндров. Потом это конечно оказалось не так (видимо, какое-то сжатие все-таки происходит, размер распечаток — ок. 40 мегабайт), но к счастию лента состояла из нескольких томов, и я просто распечатал их один за другим.
Итак, добавим в каталог, в описание пользователя MAINT, строку:
MDISK 192 3330 200 130 CPR6L0 WR READ * SOURCES
Примечание: весь процесс я выполнял под пользователем MAINT. Вообще говоря, это — злостное нарушение правила «не работай под рутом» и так делать нельзя.
Запустим VM, залогинимся как MAINT, запустим CMS. введем перфокарты с описанием каталога и обновим его командой «DIRECT MYVM». Перелогинимся (чтобы изменения учетной записи вступили в силу). Подключим диск 192 (командой «access 192 b») и ленту с исходниками. Загрузим первый том архива (исходники CP) командой «VMFPLC2 LOAD * * B».
Распечатка
Я долго не мог найти способ распечатать несколько файлов одной командой. Дело в том, что команды PRINT и PUNCH ругаются на звездочки в имени файла. А печатать пятьсот штук файлов вручную что-то не хотелось. В конце-концов я решил, что проще всего будет написать программу распечатки на ассемблере, но роясь в мануалах по ассемблеру, нашел более легкий способ.
У команды LISTFILE (аналог DIR/ls) есть опция (EXEC. Если запустить LISTFILE с этой опцией, LISTFILE создаст файл (файлы EXEC — это аналог bat/sh), со строками вида &1 &2 . &1 &2 — это параметры скрипта.
Теперь внимание! При запуске команды CMS PUNCH, в каждой строке файла CMS EXEC вместо &1 будет подставлен PUNCH, а затем строка выполнена. По-моему, это самое лучшее решение инженеров IBM в области пользовательского интерфейса (хотя и ненужное в Linux при наличии awk).
Я поэкспериментировал с различными распечатками и решил, что PUNCH лучше чем PRINT.
Примечание: геркулесовский вывод перфокарт настроен на формат EBCDIC. Чтобы получить читабельный код, надо перенастроить его на ASCII командой «ATTACH D ./sources/DMK.txt ascii».
Итак, создаем список файлов:
L * * B (EXEC
И выводим их:
CMS PUNCH
...длинный список файлов.
Уже когда все закончилось, я догадался, что имело смысл добавить в CMS EXEC первую строчку &CONTROL OFF (аналог echo off). Да, не застал я не то что VM/370, но даже и элементарный MS-DOS.
Разделение файлов
В результате предыдущих манипуляций, я получил файл DMK.txt со склеенными вместе исходниками. Теперь их надо разделить. Для этого я применил такой скрипт на awk:
/^MAINT MAINT MAINT MMMM AAAA IIII NNNN TTTT$/ {next}
/^USERID/ {next}
$1==":READ"{
MYFILE="./DMK/"$2 "_" $3
next
}
{
print $0 > MYFILE
}
Прошу прощения за г-код, писалось на коленке и не с целью читабельности/эффективности.
Теперь таким же образом можно вывести исходники CMS (условный код DMS), RSCS (условный код DMT, название Remote Spooling Communication Subsystem немного путает, но это в каком-то смысле аналог fido) и IPCS (условный код DMM, системные тесты).
Ссылки
This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends:
- Massacres That Matter - Part 1 - 'Responsibility To Protect' In Egypt, Libya And Syria
- Massacres That Matter - Part 2 - The Media Response On Egypt, Libya And Syria
- National demonstration: No attack on Syria - Saturday 31 August, 12 noon, Temple Place, London, UK
Комментариев нет:
Отправить комментарий