Оберон-клуб «ВЄДАsoft»

Твердыня модульных языков
Текущее время: 19 мар 2024, 11:54

Часовой пояс: UTC + 2 часа




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Gardens Point Component Pascal и J2ME
СообщениеДобавлено: 20 июл 2012, 17:44 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Код: "OBERON"
  1. MODULE Hello;
  2. IMPORT
  3. lcdui, midlet;
  4. TYPE
  5. Main* = POINTER TO RECORD(midlet.MIDlet+lcdui.CommandListener)
  6. END;
  7. VAR
  8. D: lcdui.Display;
  9. C1: lcdui.Command;
  10. F : lcdui.Form;
  11. item : INTEGER;
  12. PROCEDURE (self:Main) startApp*();
  13. BEGIN
  14. D := lcdui.Display.getDisplay(self);
  15. C1 := lcdui.Command.Init("Exit", 7, 0);
  16. F := lcdui.Form.InitForm("title");
  17. item := F.append("Проверка");
  18. F.addCommand(C1);
  19. D.setCurrent(F);
  20. F.setCommandListener(self);
  21. END startApp;
  22. PROCEDURE (self:Main) pauseApp*();
  23. END pauseApp;
  24. PROCEDURE (self:Main) destroyApp*(c: BOOLEAN);
  25. END destroyApp;
  26. PROCEDURE (self:Main) commandAction*(c:lcdui.Command; d:lcdui.Displayable), NEW;
  27. BEGIN
  28. IF c = C1 THEN
  29. self.destroyApp(TRUE);
  30. END;
  31. END commandAction;
  32. END Hello.

С разрешения Piligrim'а переношу топик форума www.Boolean.Name с тестовой программой на GPCP (Gardens Point Component Pascal) для J2ME на наш форум.

Биндинги для GPCP к MIDP2 у Piligrim'а к сожалению не сохранились, всё что осталось — этот архив.

Что ж, будет здорово, если наш форум даст толчок для новых экспериментов по использованию Оберон-технологий для разработки для J2ME, а, возможно, и Android'а. Первый этап видится мне просто попыткой повторить сделанное Пилигримом, добиться компиляции и работы данного кода. Потом безусловно можно продолжить. Делитесь, пожалуйста, достижениями.

До этого я экспериментировал с компилятором JOB, пытаясь собирать мидлеты с его помощью, но не очень удачно. Были выяснены ограничения данного компилятора, сводящие на нет его пользу для разработки собственных проектов. В этом свете компиляторы GPCP и Canterbury Oberon-2 for JVM выглядят более привлекательно для практического применения. Дело по разработке для платформы Java на языках, отличных от Java, которым мы можем заняться, весьма нетривиально, но тем слаще плоды. Piligrim показал нам направление, в котором можно двигаться, за что я ему благодарен.


Вложения:
Комментарий к файлу: Мидлет, написанный на GPCP
bin.zip [1.77 КБ]
Скачиваний: 1344
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Gardens Point Component Pascal и J2ME
СообщениеДобавлено: 23 июл 2012, 16:23 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Не то чтобы я был любителем платформы или языка Java. Но высокая доступность устройств с платформой Java на борту и языком Java для программирования под неё, причём практически без приемлемой альтернативы для разработчиков, пробуждают интерес к этому направлению. Поэтому я по мере освоения GPCP и получения успехов на этом поприще буду описывать свои шаги в данном направлении, в надежде, что кому-то это сэкономит время, а может и добавит энтузиазма для освоения GPCP как языка для разработки программ для интересующих меня платформ J2ME и Android.

Установка GPCP сводится к распаковке архива и прописывании двух переменных, нужных для его работы. У вас должна быть установлена среда поддержки JRE (Java Runtime Environment). Скачиваем дистрибутив Gardens Point Component Pascal v1.3.12 for JVM и распаковываем в подходящую папку. У меня это будет D:\Archive\Projects\XDev\

Мой компьютер -> Свойства -> Дополнительно -> Переменные среды

Там надо создать переменную PATH со значением %PATH%; D:\Archive\Projects\XDev\gpcp-JVM\bin
и переменную JROOT со значением D:\Archive\Projects\XDev\gpcp-JVM

Исправьте пути под свою папку с GPCP. После прописывания переменных попытка запуска GPCP может привести к такому:
Цитата:
"cprun" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
Значит нужна перезагрузка, чтобы переменные окружения вступили в силу.

На этом установка завершена. Примеры из поставки компилируются, всё работает. В принципе, процесс установки достаточно хорошо освещён в документации. Упомяну, что GPCP работает и под Linux.

Благодарю Rafi за помощь в освоении GPCP.


Вложения:
Комментарий к файлу: Переменные среды для работы GPCP
path_vars.png
path_vars.png [ 4.59 КБ | Просмотров: 42655 ]
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Gardens Point Component Pascal и J2ME
СообщениеДобавлено: 24 июл 2012, 16:39 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Попробую сделать биндинги нужных для сборки Hello.cp модулей lcdui и midlet. В более ранних версиях GPCP, как я понял, биндинги нужно было делать вручную, что-то вроде такого:
Код: "OBERON"
  1. SYSTEM MODULE midlet;
  2.  
  3. IMPORT java_lang;
  4.  
  5. TYPE
  6. MIDlet* = EXTENSIBLE RECORD (java_lang.Object)
  7. END;
  8.  
  9. END midlet.

Компилируем в midlet.cps командой: @CALL cprun gpcp -special midlet.cp

Этот способ производства биндингов безусловно очень полезен, но какова же была моя радость, когда я увидел в поставке GPCP утилиту J2CPS, которая генерирует символьные файлы .cps прямо из готовых .class — её-то мы и будем использовать.

Для начала я взял из установленного Sun Java Wireless Toolkit 2.5.2_01 for CLDC архив midpapi10.jar (по идее первая версия MIDP проще и с ней меньше потенциальных проблем) и распаковал оттуда папки com и javax прямо в корень gpcp-JVM.

Запускаем команду:

j2cps -v javax.microedition.midlet

(-v — это ключик verbose для расширенного вывода информации)

Reading Symbol File <D:\Archive\Projects\XDev\gpcp-JVM\libs\JvmSystem\sun_reflec
t_generics_factory.cps>
INFO: Reading symbol file sun_reflect_generics_factory.cps
Bad symbol file format. 1

Что же мы видим! Я имел с этим много непоняток, но в итоге оказалось, что это ошибка в дистрибутиве GPCP. Файл libs\JvmSystem\sun_reflect_generics_factory.cps действительно повреждён, и, как выяснилось дальше, не только он один. Почесав тыковку, я придумал как сгенерировать корректный файл. Для этого из установленной у меня Java берём папку:

d:\Program Files\Java\jre6\lib\rt.jar\sun\

и распаковываем её в папку с GPCP. После чего можно подать команду:

j2cps -v sun.reflect.generics.factory

и... убедиться, что файл sun_java2d_pipe.cps тоже повреждён:

Reading Symbol File <D:\Archive\Projects\XDev\gpcp-JVM\libs\JvmSystem\sun_java2d
_pipe.cps>
INFO: Reading symbol file sun_java2d_pipe.cps
Bad symbol file format. 1

Вот так потеха. Попытки починки файлов привели к тому, что эти битые файлы завязаны друг на друге и друг друга требуют. Такой, мягко говоря, непростой случай. Требует шаманского подхода. В итоге выяснилось, что битых файла там 4:

sun_java2d_loops.cps
sun_java2d_pipe.cps
sun_nio_cs_ext.cps
sun_reflect_generics_factory.cps

Займёмся грязным хаком. Поскольку в дистрибутиве GPCP v1.3.12 символьные файлы данных классов повреждены, достанем из более ранней версии GPCP 1.3.4 файлы libs\JvmSystem\sun_java2d_loops.cps и libs\JvmSystem\sun_java2d_pipe.cps, нужные нам для раскрутки, и запишем их поверх битых. Пусть нас пока не смущает, что каждый новый (битый) и старый файлы отличаются по размеру. Со спокойной душой запускаем следующую команду:

j2cps sun.reflect.generics.factory

и получаем в текущей папке красивый (и главное корректный!) файлик sun_reflect_generics_factory.cps

после чего можно сгенерировать для него и html-представление:

cprun Browse -html -sort sun_reflect_generics_factory

Как мы видим, файл sun_reflect_generics_factory.html сгенерирован правильно и содержит осмысленную информацию.

После сопоставления ошибочного и корректного файла sun_reflect_generics_factory.cps мы можем видеть, что они отличаются всего одним байтом 00 и FF по смещению 758H. Тем не менее, битый файл действительно ошибочен, на него ругается компилятор (“Bad symbol file format. 1”) и утилита для генерации html-представления символьных файлов Browse:

Expected $ got
Error in Parse()
java.lang.Exception: Bad symbol file format
Error in Parse()
java.lang.NullPointerException

И, кстати, генерирует html-файл с нулевым размером. Вот откуда и хвосты. Что ж. Запишем sun_reflect_generics_factory.cps и sun_reflect_generics_factory.html ВМЕСТО испорченных файлов. Теперь, обладая здоровым файлом sun_reflect_generics_factory.cps, попробуем починить другие файлы таким же способом.

j2cps sun.java2d.pipe

Не знаю радоваться или плакать, но генерация завершилась не так уж и успешно.

INFO: Creating symbol file sun_java2d_pipe
Exception in thread "main" java.lang.NullPointerException
at J2CPS.ClassDesc.writeType(ClassDesc.java:464)
at J2CPS.SymbolFile.WriteSymbolFile(SymbolFile.java:293)
at J2CPS.PackageDesc.WriteSymbolFiles(PackageDesc.java:172)
at J2CPS.J2CPS.main(J2CPS.java:66)

Попытка восстановить файл sun_java2d_loops.cps заканчивается примерно также. На этом пока завершим эксперименты и свяжемся с авторами проекта GPCP, ибо уже видно, что не всё там хорошо.

Прикладываю архив с починенным sun_reflect_generics_factory.


Вложения:
Комментарий к файлу: Правильный sun_reflect_generics_factory
sun_reflect_generics_factory.zip [2.27 КБ]
Скачиваний: 1319
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Gardens Point Component Pascal и J2ME
СообщениеДобавлено: 02 авг 2012, 09:47 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Наши усилия и багрепорт поспособствовали скорейшему релизу новой версии GPCP, а именно v1.3.13. Замечу, что в рассылке по GPCP мне ответил профессор K John Gough. Человек компетентный, ответил быстро и чутко отреагировал на багрепорт. Ещё плюс в пользу GPCP. Проект жив, развивается. Ещё что немаловажно — исходники открыты. Что же касается багов, то пользователей и бета-тестеров у GPCP пока не так уж и много, отсюда и они. Ничего, постепенно выловим. Зато их поиск занимает мало времени — GPCP даёт массу информации о баге.

Итак, обновимся до новой версии и посмотрим что изменилось. Заодно замечу, что зарепортил ещё один баг, выявленный в процессе генерации символьных файлов для MIDP 1.0, и профессор K John Gough снова очень оперативно выслал мне фикс. Обновление дистрибутива будет в ближайшие дни.

Напомню, что наша цель сейчас — сгенерировать биндинги MIDP 1.0 для компиляции Hello.cp. И начатая нами последовательность действий для этого. Мы скопировали внутрь папки /gpcp-JVM взятые из Sun Java Wireless Toolkit 2.5.2_01 for CLDC (архив midpapi10.jar) папки com и javax.

Подаём команду:

j2cps javax.microedition.midlet

и наконец видим результат её правильной работы в виде сгенерированных файлов:

com_sun_midp_lcdui.cps
com_sun_midp_midlet.cps
javax_microedition_lcdui.cps
javax_microedition_midlet.cps

Исходник Пилигрима в самом начале темы придётся слегка модифицировать, чтобы он собрался с полученными биндингами (прикладываю). Подадим команду:

cprun gpcp Hello.cp

Порядок. Hello.cp скомпилировался без ошибок и появилась подпапка /CP/Hello с результирующими файлами Hello.class и Hello_Main.class, а также символьный файл Hello.cps. Посмотрим какое html-представление он имеет:

cprun Browse -html -sort Hello

Код: "OBERON"
  1. MODULE Hello;
  2.  
  3. IMPORT
  4. RTS,
  5. javax_microedition_lcdui := "javax.microedition.lcdui",
  6. javax_microedition_midlet := "javax.microedition.midlet";
  7.  
  8. TYPE
  9.  
  10. Main* = POINTER TO RECORD (javax_microedition_midlet.MIDlet + javax_microedition_lcdui.CommandListener) (* Typebound Procedures *)
  11. END;
  12.  
  13.  
  14.  
  15.  
  16. PROCEDURE (self:Main) commandAction*(c : javax_microedition_lcdui.Command;
  17. d : javax_microedition_lcdui.Displayable);
  18.  
  19. PROCEDURE (self:Main) destroyApp*(c : BOOLEAN);
  20.  
  21. PROCEDURE (self:Main) pauseApp*();
  22.  
  23. PROCEDURE (self:Main) startApp*();
  24.  
  25. END Hello.

Всё отлично получилось. В следующий раз попробуем, следуя опыту Пилигрима и пользуясь утилитами Ant и ProGuard, собрать из набора .class-ов готовый сверифицированный JAR, который можно будет открыть в эмуляторе и загрузить в телефон.


Вложения:
Комментарий к файлу: Исправленный Hello.cp
Hello.cp.zip [10.13 КБ]
Скачиваний: 1285
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Gardens Point Component Pascal и J2ME
СообщениеДобавлено: 02 дек 2012, 23:50 
Не в сети
Аватара пользователя

Сообщения: 11
Роясь во внутренностях джаров свеженькой J2ME SDK (а именно за версией 3.2) обнаружил в midp_2.1 вкуснейшую вещь под магическим названием javax.microedition.lcdui.game. И в этой самой game не что иное, как классы для игрокодинга. Там и спрайты, и тайлы, и слои в придачу. Не терпится сваять биндинги к этому добру и поюзать.
Тут вот краткое описание
http://vantage.ko3.ru/opisanie_paketa_j ... lcdui_game


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Gardens Point Component Pascal и J2ME
СообщениеДобавлено: 07 мар 2015, 08:44 
Не в сети

Сообщения: 12
Здравствуйте, коллеги. Что-то не получилось запустить gcpc для jvm.
Вот скриншот, может будет из него ясно, ято я не так делаю.

Код: "OBERON"
  1.  
  2. gpcp-JVM-v1.3.16.zip
  3.  
  4. C:\gcpc\docs>java -version
  5. java version "1.6.0_38"
  6. Java(TM) SE Runtime Environment (build 1.6.0_38-b05)
  7. Java HotSpot(TM) Client VM (build 20.13-b02, mixed mode)
  8.  
  9. C:\gcpc\my>cprun gpcp hello.cp
  10. Exception in thread "main" java.lang.NoClassDefFoundError: CP/gpcp/gpcp
  11. Caused by: java.lang.ClassNotFoundException: CP.gpcp.gpcp
  12. at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
  13. at java.security.AccessController.doPrivileged(Native Method)
  14. at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
  15. at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
  16. at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
  17. at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
  18. Could not find the main class: CP.gpcp.gpcp. Program will exit.
  19.  
  20.  


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Gardens Point Component Pascal и J2ME
СообщениеДобавлено: 07 мар 2015, 16:27 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Не ясно. Вот что у меня:

Код: "OBERON"
  1. d:\WIN32APP\Dev\gpcp-JVM\JVMexamples\hello>cprun gpcp Hello.cp
  2. #gpcp: <Hello> No errors
  3. d:\WIN32APP\Dev\gpcp-JVM\JVMexamples\hello>cprun Hello
  4. Hello CP World
Как Вы устанавливали GPCP?


Вложения:
Установка Gardens Point Component Pascal.doc [51.5 КБ]
Скачиваний: 1321
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Gardens Point Component Pascal и J2ME
СообщениеДобавлено: 07 мар 2015, 16:48 
Не в сети

Сообщения: 12
Спасибо.

С oberoncore подсказали, что в инструкции gpcp.jvm не написали, что в Windows надо установить переменную окружения JROOT. После этого все заработало.


Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 2 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
© VEDAsoft Oberon Club