CFA LogoCFA Logo Computer
Новости Статьи Магазин Прайс-лист Драйвера Контакты
Новости
RSS канал новостей
В конце марта компания ASRock анонсировала фирменную линейку графических ускорителей Phantom Gaming. ...
Компания Huawei продолжает заниматься расширением фирменной линейки смартфонов Y Series. Очередное ...
Компания Antec в своем очередном пресс-релизе анонсировала поставки фирменной серии блоков питания ...
Компания Thermalright отчиталась о готовности нового высокопроизводительного процессорного кулера ...
Компания Biostar сообщает в официальном пресс-релизе о готовности флагманской материнской платы ...
Самое интересное
Программаторы 25 SPI FLASH Адаптеры Optibay HDD Caddy Драйвера nVidia GeForce Драйвера AMD Radeon HD Игры на DVD Сравнение видеокарт Сравнение процессоров

АРХИВ СТАТЕЙ ЖУРНАЛА «МОЙ КОМПЬЮТЕР» ЗА 2003 ГОД

Гурьбою на пальму

Анатолий ШУБА

Linux- и WinOS-программирование довольно часто затрагивается на страницах МК. Однако в новостях нередко проскакивают сообщения, касающиеся развития так называемых карманных компьютеров или наладонников. Программирование в подобных устройствах автору показалось довольно интересным занятием, и он готов поделиться накопленным опытом. Уверяю вас, программировать под наладонник — это также просто, как выпить бокал пива.

Прежде всего хочу сразу оговориться, что в данном опусе речь пойдет только о программировании устройств, работающих под управлением операционной системы PalmOS. Вызвано это тем, что в один прекрасный день мне вдруг захотелось попробовать заработать пару долларов на ниве shareware-программирования. А как известно, с помощью Linux этого сделать не удастся де юре, а с помощью Windows — де факто («Все уже украдено до нас» — Бывалый). Потому я и начал раздумывать, какую бы систему мне начать изучать — PalmOS или же клоны WindowsCE. И в этот момент я встретил своего старого школьного товарища, который, размахивая у меня перед носом своим Palm m100, поведал словами настоящего преданного Palm-юзера о бесконечной цепочке преимуществ, которыми обладают устройства с PalmOS против WinCE-совместимых девайсов. В первую очередь это, конечно же, втрое меньшая цена и втрое большее время работы без подзарядки.

Итак, приступим. «Что такое, товарищи, дебют, и что такое, товарищи, идея?» (О. Бендер). Разработчики PalmOS попытались вложить в свою операционную систему следующие философские принципы — простота и мобильность (гениально, не правда ли?) Все версии операционной системы PalmOS, начиная от 1.0 и до вышедшей совсем недавно «Пятерки» являются однозадачными системами, все приложения однопотоковые. Вернее, пользователь не может написать многопоточное приложение, сама же ОС запускать задачи параллельно может, но только системные. Что, естественно, упрощает само ядро системы и процесс написания приложений. PalmOS, так же как, например, ОС QNX, является системой с микроядром. Последнее было написано парнями из Kadak Products Ltd., а они-то знают, что такое ОС реального Рис. 1.времени для встроенных систем. PalmOS является событийно-управляемой системой.

Также поддерживается хотя и простой, но вполне функциональный графический интерфейс. Того небольшого набора интерфейсных графических примитивов, которыми обладает ОС, хватает с головой. Это окна, кнопки, окна сообщений, выпадающие списки, таблицы, скролл-бары и т.д. Так что в общем Виндовс получается очень даже похожим на PalmOS. Экранчик у Палма небольшой, всего 160160 точек (в современных моделях встречаются 320320 и 240320), чего хватает для отображения одной формы приложения (Рис. 1).

Что надо иметь палмовскому разработчику, прежде чем приступать к программированию? Правильно, необходимо выбрать среду программирования. Мне известны две серьезные среды программирования для PalmOS. Первая из них — это бесплатная PRC-Tools, которая распространяется по лиценции GNU и является идеальным выбором для линуксоида. Вторая же —CodeWarrior for PalmOS от известного разработчика компиляторов компании Metrowerks (http://www.metrowerks.com), работает под ОС Windows 9x. Стоит, кстати, недешево, я бы даже сказал, очень недешево. Но кто ищет, тот всегда найдет (особенно если искать умеет :-)). Также программисту никак не обойтись без программного эмулятора Палма. Последняя известная мне версия 3.5 доступна для бесплатной загрузки с серверов http://www.palmsource.com/developers. Предлагаются версии под Windows, Unix, Mac.

Хотя оба вышеуказанных компилятора являются сишными, существует множество других, способных генерировать мотороловский код (внутри каждой Пальмы находится процессор Motorola 68K, за исключением моделей с установленной версией 5.0 — там уже находится RISC-процессор ARM (что, однако, не мешает пятой версии выполнять приложения, написанные для предыдущих версий, благодаря наличию мотороловского эмулятора, встроенного в ОС)). Причем не только для Си, но и для Бейсика, Паскаля, Фортрана, однако по настоящему толковым продуктом, по-моему, можно назвать только эти две среды разработки.

Еще я бы вам посоветовал раздобыть файлик, озаглавленный как Palm OS Reference.pdf. В этом файле описаны все документированные функции API PalmOS.

Теперь будем считать, что все необходимое у вас есть. Приступим к программированию и создадим бессмертную и незабвенную программу «Hello, World!»

Писать будем на Си. (Почему именно Си? Потому, что я так захотел :-).) Разберем простую стартовую функцию для Palm. Я говорю «простая», потому что существует и другой подход к написанию приложений — с помощью, т.н. POL (PalmOS Object Library). Программирование с помощью POL требует от программиста как минимум твердых знаний С++ и хотя бы небольшой опыт программирования под Windows на VisualC++, благо оно очень напоминает программирование под Windows с помощью библиотеки MFC. Итак, функция выглядит следующим образом:

Как видите, разработчики PalmOS немного попустили Кернигана и Ритчи и не назвали свою стартовую функцию main(). Вместо классических main() или WinMain() программы для Палма всегда стартуют с PilotMain()

Примечание: Правильнее было бы сказать — «почти всегда», поскольку существует два типа приложений: обычные и хаки (hack). Хак — это приложение, написанное для перехвата системных вызовов и выполняющее дополнительный код вместо или в дополнение к перехваченному системному вызову. Для активации или деактивации хаков написано специальное ПО, так называемые менеджеры хаков. Два самых известных из них — это Х-Master и Hack-Master. Так вот, хаки могут стартовать с любой функции, определенной программистом. Не знаю, почему так получилось, однако сами хаки и манипуляция ими — это довольно распространенное явление, и для работы с ними в операционной системе предусмотрены соответствующие ресурсы, однако сама корпорация Palm так и не написала свой «родной хак-менеджер», что мне кажется странным. По крайней мере, мне не встречался хак-менеджер, на котором стояла бы клеймо «Made in Palm corp».

Но вернемся к нашей теме. В приложение передаются следующие аргументы:

cmd — команда, по которой произошел запуск приложения;

cmdPBP — указатель на область памяти, содержащую некую информацию, ассоциированную с данным кодом запуска;

Flags — некая дополнительная информация о запуске.

Первый оператор программы — это анализ команды, с которой произошел запуск. Кроме команды sysAppLaunchCmdNormalLaunch, существует множество других (около трех дюжин документированных, а вместе с недокументированными, может, и больше). Однако наша программа будет реагировать только на нормальный запуск, т.е. когда пользователь тыкнет стилусом в иконку программы. Далее, если это действительно «Нормал лаунч», вызывается функция API FrmGotoForm, отвечающая за отсылку двух сообщений —frmLoadEvent и frmOpenEvent — нашей форме (в ПалмОС окна носят название Form), идентификатор которой находится в аргументе функции.

И наконец, вызывается определенная пользователем функция AppEventLoop(). Как было сказано выше, PalmOS — система событийная, а в этой функции как раз и будут отслеживаться события, переданные в наше приложение. А выход из AppEventLoop() будет означать завершение работы программы. Функция может быть такой:

Здесь мы видим цикл, в котором функция EvtGetEvent() ожидает системное сообщение (второй аргумент функции (evtWaitForeverer) называется таймаутом и в данном случае указывает на то, что событие будет ожидаться вечно. Но можно запросто поставить другой таймаут, равный количеству системных тиков, после истечения которых функция вернет результат). Функция EvtGetEvent() — блокирующая, т.е. она не прервет свою работу до тех пор, пока не истечет таймаут или пока не будет отловлено какое-либо событие. После того как событие получено, оно последовательно передается в обработчик системных сообщений (SysHandleEvent(), здесь будут обработаны нажатия т.н. хард- и софт- клавиш на девайсе), затем в обработчик сообщений меню (MenuHandleEvent()), и наконец, если ни в одном из этих обработчиков событие не будет обработано, то оно дойдет до определенной нами функции AppHandleEvent(). Из всех представленных в этом коде функций все являются системными, кроме одной: AppHandleEvent(). Эта функция определяется программистом. В качестве аргумента ей передается идентифицированное событие, после чего оно анализируется. Если это событие frmLoadEvent (а оно уже было послано функцией frmGotoForm), то необходимо проинициализировать наше окно, а также указать на обработчик поступивших событий для нашего окна. Это делается с помощью системной функции FrmSetEventHandler(). В целом же функция AppHandleEvent() должна выглядеть примерно так:

И наконец, последняя нужная нам функция — это MainFormHandler(), отвечающая за обработку событий, полученных главной формой. Функция, которая перехватит второе сообщение, посланное frmGotoForm (как уже было сказано, frmGotoForm() посылает окну два сообщения. Первое —frmLoadEvent — было перехвачено AppHandleEvent, а обработкой второго как раз и займется MainFormHandler()). В ответ на сообщение frmOpenEvent окно будет прорисовано на экране.

Ну теперь все, можно компилировать и запускать! Что? Не компилируется? А как же она откомпилируется без файла ресурсов? Или оставим ресурсы писать Пушкину?

Итак, файл ресурсов. Содержит в себе все графические ресурсы приложения. У нас файл ресурсов будет содержать одну форму и одну метку. Создается в большинстве случаев ручками. Хотя Metrowerks построил для этой цели визуальный редактор Constructor for PalmOS. Средство, безусловно, очень удобное, но я привык пользоваться Notepad’ом. Расширение файла ресурсов должно быть .rcp, итого имеем Hello.rcp.

Как нетрудно увидеть, здесь описана одна форма и ее содержимое. На форме у нас будет одна метка с гордой фразой и с координатами (60,60). Не забудьте создать файл идентификаторов ресурсов Hello_Rch.h. Он будет небольшим:

Пару слов о ключевом слове APPLICATION в файле ресурсов. Поскольку в файловой системе PalmOS отсутствует какое-либо подобие древовидной структуры и каталогов, то все файлы отличаются друг от друга параметром, который называется Creator ID. Файл, созданный каким-либо приложением, получает в наследство от него эту метку. И если приложению понадобится удалить все свои файлы, то поиск будет осуществляться по этому самому Creator ID. Этот идентификатор должен содержать 4 ASCI-символа и быть абсолютно оригинальным. То есть, два приложения не могут иметь два одинаковых идентификатора. Если это произойдет, могут быть неприятности — например, во время инсталляции одного приложения будет стерто другое приложение, и все файлы, ему принадлежащие, также будут потеряны. Для того чтобы этого избежать, разработчик должен выбрать для своей программы какой-либо идентификатор, сходить по адресу http://dev.palmos.com/creatorid, проверить, не занят ли он уже кем-то, и если он еще не занят, то зарегистрировать его как свой (регистрация абсолютно бесплатная, однако не забывайте, что идентификаторы со всеми строчными буквами зарезервированы для самой ОС). Выбранный мной идентификатор HELL (от английского Hello, а не то, что вы подумали) на уникальность мною не проверялся, так Рис. 2.что эту программу на реальном устройстве лучше не запускайте :-).

А вот теперь можно спокойненько заняться компиляцией и запускать программу в эмуляторе (Нажмите F5, если вы в CodeWarrior). Результат можно благоговейно наблюдать на Рис. 2.

Я тоже начал свою палмовскую веху моей жизни c написания этой программы. Вам, конечно же, хочется спросить: «Родной, а как же поживают твои shareware-разработки, ради которых ты начал изучать PalmOS? Или все закончилось на «Хелло Ворде?» На что я отвечу: «Первую пару долларов я уже заработал, и поэтому чувствую себя превосходно». Кому интересно, может посетить http://www.palmgear.com(это один из крупнейших регистраторов и продавцов shareware-продуктов для PalmOS. Я бы даже сказал, самый крупный продавец), набрать ключевое слово whois в строке поиска ПО и нажать Go. В ответ вы получите список из пяти или шести whois-клиентов интернет службы WHOIS. Один из них —CheckWWW v.1.2 — это и есть моя разработка. А если часик порыщете по этому серверу и посмотрите, за какие ну совсем уж тупые программы буржуины выкладывают звонкие монетки, то прямо сейчас окунетесь с головой в изучение PalmOS API.

Если я говорил убедительно, то милости просим: http://www.palmsource.com/developers — всевозможная документация по PalmOS. В первую очередь обязательно скачайте PalmOS Reference, PalmOS Companion и PalmOS Companion2.

Ну а массу исходников и программ можно найти на ряде сайтов, например http://palmos.sources.ru, http://palmman.host.skи т.д. и т.п.

На программистских частях форумов http://www.ladoshki.com.uaи http://ihand.ruвам всегда дадут толковый совет.

Меньше багов, больше хороших товаров!

Рекомендуем ещё прочитать:






Данную страницу никто не комментировал. Вы можете стать первым.

Ваше имя:
Ваша почта:

RSS
Комментарий:
Введите символы или вычислите пример: *
captcha
Обновить





Хостинг на серверах в Украине, США и Германии. © www.sector.biz.ua 2006-2015 design by Vadim Popov