[Из песочницы] Код 15-летней давности и газета объявлений

Увидев переводную публикацию о поддержке древнего как кости мамонта legacy-кода, не могу не поделиться историей из своего опыта, а заодно, и призвать написать тех, кто также как и я сталкивался с подобными задачами. Да и за державу обидно — почему подобные публикации — в основном, переводные? У нас есть и было немало программистов-самородков, ваяющих свое, ни с чем не совместимое программное обеспечение — свои собственные СУБД, графические интерфейсы, драйвера для промышленного оборудования собственной разработки. По работе я немало сталкивался с творениями местных кулибиных, и еще расскажу про них, если будет интерес.

Случилась эта история в 2001 году и началась с того, что в FIDO-шной конференции $CRACK$.TALKS, обычным содержанием которой являлись кряки, объявления о поиске кряков и разговоры крякеров «за жизнь», я увидел нетипичное объявление с вопросом кто мог бы взяться за доработку графической программы. Так как в этой конференции «доработкой» любили называть взлом коммерческого программного обеспечения, например, «отвязку» от аппаратного ключа, а коммерческим взломом я не занимался, то на это объявление я не стал обращать внимания, решив, что тут уж найдутся те, кто выполнит заказ, связавшись с адресатом через личную почту. Однако, через неделю объявление повторилось, мне стало интересно о чем идет речь, и я связался с его автором.

Тот пояснил, что речь идет именно именно о доработке графической программы, и что тусующиеся в конференции крякеры, узнав о чем идет речь, эту работу делать поголовно отказались, сказав, что они занимаются именно взломом, а не доработкой программ. После этого он предложил встретиться для уяснения дальнейших деталей. Когда я приехал по указанному им адресу, на входе в офис я увидел табличку с названием всем известной газеты объявлений, что меня заинтриговало еще больше.
Встретивший меня мой будущий клиент оказался начальником местного ИТ-отдела, был уже в годах, но по разговору чувствовалось, что он «из наших» — программистов, хотя, и бывших, «отошедших от дел». После чего он подвел меня к компьютеру, с огромным по тем временам 21 дюймовым монитором, на котором красовалась вот такая вот картинка:

004dccb276da42f58e8d0c1e3c0c7d13.png

Подобный GUI я видел в первый раз, и уже тогда этот монохромный интерфейс выглядел старомодным, тем более, что разрешение для такого монитора было маловато, и пиксели выглядели огромными.

Из дальнейшего объяснения, я узнал, что речь идет о доработке GEM/3 Desktop, который в свое время был конкурентом MS Windows 2.0, уже его последняя коммерческая версия была 15-летней давности. Но зачем ее дорабатывать? Оказалось, что в газете использовалась древняя версия настольной издательской системы Ventura Publisher, которая запускалась только из-под GEM/3, но зато позволяла автоматизировать верстку страниц газеты, получая текст объявлений из БД — на тот момент ни одна другая система такого не умела.

fede2d493b954e81931287deed6c9af8.png

Немного поколебавшись, я взялся за эту работу. Задача состояла в доработке драйверов для дисплея с высоким разрешением 1280×1024. Драйверов было несколько, свой драйвер для разных видеоадаптеров и для каждого разрешения. Но все они поддерживали разрешение не больше 800×600, именно поэтому на увиденном мною мониторе были такие крупные пиксели, что согласитесь, не очень удобно для верстки полноформатной газеты.

Интернета у меня тогда под рукой не было, а исходников драйверов в комплекте не шло, так что взяв у клиента архив с GEM, я начал ковырять двоичный код драйверов, с тем, чтобы найти в нем все константы, задающие поддерживаемое драйвером разрешение, и заменить их на нужные. Мне это удалось, но не тут-то было: GEM, в свою очередь, работал под MS-DOS, в реальном режиме, и для доступа к видеопамяти его драйвер переключал банки видеопамяти. Простой заменой констант тут было не обойтись, надо было искать код переключения банков видеопамяти — задача нелегкая. К тому же, драйвер был продвинутый и не просто предоставлял интерфейс для перекидывания графики на дисплей, а умел рисовать графические примитивы — линии, прямоугольники и круги, код отрисовки, перемешанный с переключением банков видеопамяти был довольно запутанным. Но тут мне повезло: видеоадаптер, поддерживаемый одним из драйверов, переключал видеобанки путем вывода команд в обычно не используемый аппаратный порт, так что, переключение видеобанков можно было отловить по номеру этого порта. Через неделю, работы (как обычно — в основном ночью) мне удалось научить драйвер 800×600 от этого видеоадаптера работатьт в 1280×1024, хотя, с некоторыми графическими примитивами возникали глюки отрисовки.

И тут мне позвонил клиент и сообщил, что он нашел исходники (!) GEM. Оказывается, перекупившая GEM компания Caldera в 1999 году их зарелизила под лицензией GPL. В начале каждого файла с кодом был копирайт Caldera, но все остальное оставалось в первозданном виде 15-летней давности.

7588cd5f0639407b83c4787cacd12ecc.jpg

Понятно, что, теперь, когда в моем распоряжении были исходные тексты, работа пошла намного быстрее, хотя они были на Ассемблере с небольшой примесью C, и местами были тем еще спагетти.

999d2cb2045442d38a41eef1b86e5bc8.png

Через неделю все было готово, и я передал откомпилированные доработанные драйвера клиенту, чтобы он их попробовал. А еще через неделю, я приехал в офис для получения оплаты за работу, и мне продемонстрировали появившиеся на внутреннем корпоративном форуме газеты восторженные отзывы верстальщиков по случаю появления возможности работы с высоким разрешением экрана на больших мониторах. Причем, как оказалось, газета имела свои отделения не только в Москве и других российских городах, но также и по всему СНГ, радостные отзывы были отовсюду. И это было очень приятно, так же, как и щедрая оплата сделанной работы, составившая солидную прибавку к моей аспирантской стипендии, на которую я тогда жил.

© Habrahabr.ru