Вход в Зоопарк ручных компьютеров
Вход > Палеонтологический музей > Жизнь Замечательных Людей > Тимур Ташпулатов
--

Тимур Ташпулатов
Создатель первого бесплатного русификатора для PalmOS
Revision 1.0

Тимур ТашпулатовВкратце дело было так: первый пилот (PPPro) я купил в апреле 1998. Как само собой разумеющееся, в комплекте с ним продавался русификатор Paragon PiLoc. В этом русификаторе меня устраивало практически все, за исключением постоянных проблем с надежностью. В той версии имелась известная когда-то ошибка, связанная с тем, что при интенсивной работе с клавишами (например, прокрутка документа) система умирала. Причем, спасти положение можно было только полной перезагрузкой с потерей информации. Иными словами, Pilot превращался, как сказал кто-то в калькулятор ценой в 450 долл. Ответа на многочисленные обращения в поддержку не было. Затем (весна-лето 1998) появился Palm III.

Примерно в то же время компания "МакЦентр" объявила конкурс на создание русификатора для этого устройства. Paragon напрягся и разродился PiLoc для III, который уже нормально работал. Насколько помню, он был сделан уже не на ассемблере, а на Си, и именно поэтому они якобы выловили пресловутую ошибку. Попутно шли какие-то занятные разборки на борде "МакЦентр" (если где-то сохранились материалы, я бы с удовольствием перечитал), а для Pro русификатор как был глючным, так и оставался.

К осени 1998 я уже созрел что-нибудь написать для Pilot. Как раз начитался всякого и про HackMaster и про программирование под PalmOS, и разборки в конференциях придали энтузиазма. Но CyrHack зародился как плод коллективного творчества СПб "Клуба Пилотоманов", его обсуждение и отработка шли в SPB.PALMPILOT. Вообще он многим обязан пилотерам -- клавиатуру раскрутил Владимир Медейко, с метриками шрифтов разбирался Тимофей Лянгузов, один из шрифтов для Palm III (LargeBold) сработал его отец, см. списк благодартностей в дистрибутиве CyrHack).

Полез в Интернет, как обычно нашел ASDK, независимый SDK, тогда официальный SDK был только один и шел вместе с CodeWarrior. Нашел Pila (ассемблер), заказал бесплатную книжку на Мотороле по системе команд m68k, взял нарытых в интернете же примеров (кажется, самоучитель по написанию хаков и сорцы LogoHack) и вперед.

Потом, версии развивались, исправлялись ошибки и по просьбам пользователей, иногда появлялись новые функции. Изначально CyrHack был бесплатным, поскольку а) рассматривался как "наш ответ Керзону" (сиречь Paragon Software) и б) все-таки плод коллективного творчества.

Первая версия CyrHack появилась 11 сентября 98 и обеспечивала просто подмену системного шрифта 0 на шрифт с кириллическими символами. Затем (прошло несколько дней) появилась версия 0.2, которая работала и на Palm III, а кроме того, был реализован более элегантный способ подмены шрифта. Потом (0.3) русификатор стал уже корректно работать и на PilotPro и Palm III.

Как только вышла первая рабочая версия CyrHack, позволявшая хотя бы читать, народ сразу затребовал и возможность ввода текста. Верней, клавиатура экранная тоже обрусела (которая Intl), но в какой-то эскимосской раскладке. Вытащили мы тогда из PalmOS на свет божий ресурс TKBD, в котором клавиатура и лежит, и стали его ковырять то так, то этак. А Владимир Медейко пошел дальше -- расковырял формат ресурса и написал тулзу, которая позволяла собирать свои собственные TKBD ресурсы. И тогда у нас не было ни исходных текстов PalmOS (не считая самостоятельно сделанных :)), ни описания ресурсов.

В версии 0.4 появилось русское Graffiti, переключаться с английского на русский можно было последовательностями \R и \L. Тут я наконец разобрался, почему шрифты показываются в SysKeyboardDialog и в AsciiChart так криво -- потому что вызовы вроде FntCharWidth и прочие не пользуются вызовом FntGetFontPtr (гады!), а лезут напрямую в память.

Затем появились: нормальная раскладка клавиатуры (0.5, кроме того, в ней снова изменился метод подстановки шрифтов -- патч таблицы шрифтов, "неэстетично, зато дешево, надежно и практично"), нормальные буквы (0.6, "наконец то буквы в шрифте перестали склеиваться подобно разварившимся пельменям"), полужирные символы (0.7, кроме того, клавиатура заменена на более пристойную "им. Медейко". Появилась Control Panel, где можно выбрать кодировку (1251/koi8r, 866 пока была только для красоты) и как следствие хаки в HackMaster обзавелись Control Panel точь-в-точь как у CyrHack).

Кодировки появились уже в начале существования программы, поскольку я увлекся идеей непременно сделать хаку панель управления, а что туда напихать? Естественно, переключатель кодировок :-)

В версии 0.8 появились символы LargeBold (для PalmOS 3), добавлена фича, позволяющая выбирать настройку CyrHack по включению питания (English/Russian/Don't care), поменялись местами большие и маленькие буквы в кодировке koi8r (очередной баг, такие мелочи преследовали CyrHack до версии 0.40. В версию 0.9 добавлен Large шрифт (PalmOS ниже 3.0), исправлена ошибка с падением на символе Graffiti shortcut и разного рода акцентированных символах, в 0.10 исправили ошибку с вводом кириллицы даже при выбранной латинской клавиатуре, появлением у всех хаков контрольной панельки от CyrHack, появилась новая система подмены клавиатуры и некоторые косметические исправления шрифтов.

15 октября 1998 появилась версия 0.11, в которой уже почти полностью было сделано русское Graffiti (за исключением букв ЙО в koi8r), уже 16 октября появилась версия 0.12, в которой исправлена ошибка с неработающими Shortcuts в русском режиме (тут кстати, у CyrHack и до сих пор проблемы), в Граффити добавлены символы "Э" и "Ъ", ("забыл ;)") и "завершена эпопея по населению шрифтов буквами ЙО". В версии 0.13 особенных новинок не было (поменялись местами большие/маленькие буквы при вводе koi8r), но версия 0.15 была во многом новой -- кардинально поменялся перехват ввода (функция EvtGetEvent вместо EvtEnqueueKey), как следствие, исчезла ошибка, связанная с крахом системы при интенсивной работе хардварными клавишами, ускорен вывод на экран (это была проблема -- CyrHack заметно влиял на скорость работы устройства) и была обеспечена возможность работы их флэш-ППЗУ.

Кстати, небольшое уточнение, не нашедшее отражения в документации -- после EvtGetEvent сразу же переключились на SysHandleEvent. Кроме того, версии до 0.15, кажется, пользовались средствами Data Manager (DmRead/DmWrite), чтобы не заморачиваться с выделением драгоценной динамической памяти (мало ее и пальмовские доки однозначно говорт, что расходовать ее надо как воду в пустыне) для подмены таблицы шрифтов. То есть программа оказалась по сути самомодифицирующейся. Панкуха, во флэш-пямяти это работать не будет, очевидно. Старый HackMaster писАлся в те времена, когда о записи во флэш никто и не думал. Посему он открывал хаки на RW и обламывался, если хак сидел во флэше. Умельцы его быстро поправили и появилась версия HackMaster 0.91, которая работала нормально. Cyrhack пришлось переписать на Memory Manager.

Версия 0.16 привнесла исправление ошибки с неработающим HotSync (следствие перехвата EvtGetEvent, потому и перешли к SysHandleEvent как к более безопасному способу обработать ввод пользователя до того, как это успеет сделать система) и сортировки, в 0.17 появился индикатор раскладки, в 0.18 способ переключения раскладок изменен с комбинаций \L и \R на обычный щелчок по индикатору En/Ru (тут CyrHack стал первым), в 0.19 исправлена ошибка из-за которой переключение индикатора не работало на PalmIII, несоответствие раскладки и Power on mode, вместо прямого считывания координат индикатора применяется перехват GsiSetLocation (как следствие, переключение щелчком должно работать на PalmOS 1.0, но этого никто не проверял).

Версия 0.20 стала исправлением ошибок с индикатором и сортировкой записей в Memo, 0.21 стала версией, в которой были исправлены ошибки невозможности переключения щелчком по индикатору в диалогах типа Find (это была ошибка в документации PalmOS, в той версии документации, что была у меня, в описании координат пера были перепутаны местами window- и screen-related координаты), добавлена комбинация для циклического переключения языка \| (Extended shift + штрих снизу вверх). В 0.22 пользователь переключается по щелчку на индикаторе, не теряя фокус ввода (например, в DateBook, ToDo List), в 0.23 заработали Commands, исправлены ошибки с вылезанием индикатора там, где он не нужен, "исправлен (надеюсь, окончательно) глюк с несоответствием раскладки и индикатора" (ошибка таки живучая, до сих даже в 0.40 она осталась). В 0.24 исправлена ошибка баг, из-за которой система рушилась, если перед включением хака поиграть с Control Panel и была добавлена клавиатура koi8r (и 866, "хотя толку от нее пока мало"). С версии 0.25 работают Shortcuts и перекодировка в 866 (чтение), в 0.26 было применено циклическое переключение кодировок (koi8r/1251/866) комбинацией \Y (символ иены), в 0.27 -- поправлена кодировка 866, изменен способ перекодировки символов налету (как следствие, появились буквы ЙО в кодировках koi8r и 866), исправлены ошибки "пожирания" в сокращении последнего символа, отличного от пробела.

С Shortcuts в среде PalmOS постоянно проблемы. Я перехватываю SysHandleEvent, отлавливаю значок шортката (то есть момент, когда пользователь начинает вводить шорткат), но как мне узнать, что он его ввел? Насколько помню, не существует такого символа или события -- "шорткат отработан". Вот и приходится перехватывать еще пару граффитевых функций и кое-что мудрить с "развернутым" шорткатом, то есть со строчкой символов, которая возвращается -- подменять последний на спец. код и тому подобное.

Примерно в этот момент CyrHack становится лауреатом тестирования систем русификации для суперпоративных ПК, которое организовал журнал PC Magazine/ RE (статья "Уроки русского") как лучший русификатор PalmOS.

В версии 0.28 появились кодировка Mac и был исправлена проблема, связанная с неперерисовкой окна при смене кодировки, например, в Mail, в 0.29 был ляп с кодировкой Mac, в 0.30 экранная клавиатура отображается в соответствии с выбранным режимом (русская/английская, либо цифровая), переключение по щелчку на индикаторе сопровождается звуковым щелчком. С версии 0.31 по комбинации \Y на экран выводится список доступных кодировок с подсвеченной активной кодировкой и немного видоизменен диалог "About". В 0.32 стала первой попыткой исправления ошибки, связанной с неправильным переопределением системной информации о шрифте для кодировок, отличных от 1251 и исправлена ошибка с "падением на шорткате", занесенная в 0.31. Версия 0.33 не приводила к краху системы в момент изменения кодировки в пустом Memo, исправлена еще более досадная ошибка с шорткатами, также занесенная в 0.31... Версия 0.34 стала косметической правкой -- поменялись (в который раз уже) маленькая и большая буквы ЙО на клавиатуре KOI8R, в Power on mode установкой по умолчанию сделана Don't care, в 0.35 символ "/" в меню стал корректно отрисыовываться на PalmIIIx и PalmV, появилась утилита CyrHelp с помощью по Graffiti.

Кстати, выяснилось, что есть вещи, пока никак не решающиеся элегантно -- к примеру, у списков (lists) своя собственная процедура отрисовки выбранного элемента (инвертированный элемент -- белые буквы на темном фоне), и она не имеет своего собственного API-вызова, то есть ее не перехватить. И таких мест ой как много :-(

Версия 0.36 привнесла интересную особенность -- корректно отображаются русские заголовки форм в кодировках, отличных от 1251 (например, в русифицированной Lines), это конечно не полная локализация, но иногда полезно. В 0.37 была исправлена ошибка с клавиатурой под PalmOS 1.0 (неверная отрисовка клавиатуры в кодировке 1251 и сбой системы на других кодировках) и косметическая правка: правильно отрисовывется символ "Сокращение" на устройствах с PalmOS 3.1 и выше. В 0.38 был исправлен баг с невозможностью ввода некоторых символов в кодировках 866 и Macintosh, переключение кодировок можно производить двойным щелчком по индикатору En/Ru, в 0.39 исправлен баг с шорткатами (PalmOS 3.1, 3.3), в шрифты добавлен Numeric space (PalmOS 3.3). Palm сменил коды некоторых символов -- перетащил-таки их в младшую четверть таблицы ASCII, там и numeric space, и ellipse, и много всякого.

В редакции 0.40 заработали Commands при активной русской раскладке в PalmOS 3.3, кроме того, правильно определяется версия CyrHack в приложениях вроде Launcher/Applications. В 0.41 окончательно убита ошибка с мусором в начале строк для кодировок, отличных от 1251, в 0.42 добавлена возможность временного отключения шрифтов в панели управления (просили знакомые немцы им с умляутами надо работать и с русским одновременно, но наши, кстати, тоже порадовались), в 0.43 временно отключать шрифты можно также выбором позиции "None" в списке кодировок.
Декабрь 2000

Продолжение от 1 февраля

Обстоятельства выхода беты 0.44 довольно занятны. Летом прошлого года один мой знакомый, "любитель экстремальных технологий" Theta разжился складной клавиатурой для своего Visor. На очередной пилотовке клавиатуру потерзали и, в общем, недостатков в ней не нашли, за исключением одного -- печатать по-русски приходилось в "птичьей" раскладке.

В итоге, было решено, что возможность работы с клавиатурой в CyrHack была бы интересна. Однако нужно было разжиться (на время) клавиатурой и палмом для нее (у меня был TRGpro, разъем которого отличается от Visor и PalmV/Vx). Тут на помощь пришли московские энтузиасты "пилотного дела" и нашли возможность передать в Питер PalmVx и Palm Portable Keyboard (большое спасибо Алексею Ковальчуку) на время отладки очередной беты с поддержкой этой самой клавиатуры. В результате, в достаточно короткий срок, дня за три, была в CyrHack была сделана поддержка клавиатуры, как водится, довольно панковским способом (о технических деталях меня долго пытал PC Magazine/ RE, кому интересно -- могут посмотреть там, должно быть в одном из ближайших номеров).

И тут начинается почти невероятная история. Под влиянием эйфории от <клавиатурного блицкрига> я поместил анонс о готовой бете CyrHack 0.44 с поддержкой складной клавиатуры в конференцию www.hpc.ru еще до того, как выложил бету на публичное растерзание. "Хорошие новости скачут, как блохи", сказал Гребенщиков, чуть ли не в тот же день со мной связались какие-то москвичи и, старательно подбирая слова, сделали интересное предложение: не выкладывать бету 0.44 вообще. Меня это, в общем, развеселило, предложения я не принял. Анонимные бизнесмены оказались настойчивы и второй заход изобиловал четырехзначными суммами в долларах США и туманными намеками на серьезность намерений. Мне посоветовали сразу не отказываться и хорошенько все обдумать, а тем временем ко мне в Питер подъедет специальный человек для "решения проблемы" (человек действительно подъехал и мы провели увлекательные три часа, выясняя разнообразные аспекты авторского права, человеческих взаимоотношений и мира во всем мире. Расстались чуть ли не друзьями -- человек поехал обратно, а я пошел выкладывать бету 0.44). :-))

Вскоре после выхода версии 0.44, в питерской компании "Диалектика" обнаружилась еще одна клавиатура, на этот раз нескладываемая, но довольно склАдная -- GoType! производства компании LandWare. Представитель "Диалектики", Сергей Сафронов, любезно согласился предоставить ее в мое распоряжение и версия 0.45 уже поддерживала (малой кровью) и эту клавиатуру.

Бета 0.46 своим появлением обязана выходом m100 от Palm Computing. Помимо разных вкусностей, в m100 появилась дивная программа-часики, которая конфликтовала с CyrHack (от некорректной отрисовки до краха устройства). Причина оказалась простой -- m100, в отличие от своих собратьев, имел не восемь, а девять системных шрифтов (девятый как раз и использовался для отрисовки циферблата часов). В этой же бете номер версии добавлен в название хака, просто для пущего удобства.

Бета 0.47 -- багфикс чистейшей воды -- исправлял занесенную в 0.46 ляпу с неперерисовкой индикатора Graffiti. Торопился я и забыл в одном месте исправить исходники, помня, что шрифтов теперь не 8, а 9. :)

Наконец, в бете 0.48 был исправлен баг, на который жаловались пользователи PalmOS 3.5, которые работали с KOI8-r. В PalmOS, наряду с вызовом WinDrawChars, присутствовал и вызов WinDrawChar. В каких-то ранних бетах я его перехватывал, но бросил, так как он не использовался в PalmOS до 3.5, а в этой версии его снова задействовали и стали проявляться проблемы.

Несколько позже появилась версия 0.48lite. Многие пользователи негодовали по поводу снижения скорости работы при активном CyrHack (по причине перехвата функций семейств Fntxxx и Winxxx, что необходимо для отображения разных кодировок). И проблема была решена методом вырезания функций, которые позволяли работать с кодировками, что несколько ускорило русификатор.

Последняя, на данный момент, бета, 0.49, немного улучшила положение с перерисовкой экрана при переключении кодировок. При необходимости перерисовать экран, используется функция FrmUpdateForm с соответствующим параметром, однако, существуют программы, которые не обрабатывают событие update. Причем, даже такие популярные, как AvantGo, CspotRun или Launcher III. В итоге, в код перерисовки экрана, добавлен вызов FrmUpdateForm с параметром frmRedrawUpdateCode. После этого, Launcher III и CSpotRun начали перерисовываться нормально, проблема осталась только с AvantGo, -- надо будет как-нибудь ее распотрошить и посмотреть, обрабатывает ли она сей сигнал или нет.
1 февраля 2001

RB2 Network

RB2 Network
--

Просим при воспроизведении материалов этого сайта, делать ссылку на Зоопарк ручных компьютеров
Copyright © 1999-2000 Зоопарк ручных компьютеров