OberonCore
https://forum.oberoncore.ru/

Перевод BlackBox под Linux
https://forum.oberoncore.ru/viewtopic.php?f=34&t=1280
Страница 9 из 15

Автор:  igor [ Пятница, 27 Март, 2009 12:34 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

Илья Ермаков писал(а):
В неграфическом плане вообще не мешает...
Сейчас не 1970 год, любое мало-мальски серьёзное приложение не обходится без GUI.
Илья Ермаков писал(а):
Из ядра выкидывается эта часть.
А заодно и все модули, которые импортируют COM. Об этом я и толкую. Система "подсажена" на COM.
Илья Ермаков писал(а):
Графику вообще переписывать надо, подсистему Host.
Этого можно было бы избежать. Но к сожалению не получится, так как некоторые Оберон-лозунги провозглашены только на бумаге, а на деле в Блэкбокс частенько попираются.

Автор:  Сергей Губанов [ Пятница, 27 Март, 2009 14:49 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

У нынешних "серьёзных" программ морды вебные.

Автор:  Сергей Оборотов [ Пятница, 27 Март, 2009 15:35 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

Игорь Лоскутов писал(а):
Илья Ермаков писал(а):
В неграфическом плане вообще не мешает. В графике кое-где вплетено, но тоже отслаивается.

Сейчас не 1970 год, любое мало-мальски серьезное приложение не обходится без GUI.
Не хотите - можете не выкидывать. COM - платформенно-независим, вообще-то.

Автор:  hothing [ Понедельник, 30 Март, 2009 12:29 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

:)
Verno. No, dolzhna bit podsistema realizujuschaja COM. V Linuxe takoy net ;-)

Автор:  Сергей Оборотов [ Понедельник, 30 Март, 2009 13:06 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

Её в ядре Linux-а и не будет. Подсистема COM организуется в пользовательском режиме.

Автор:  hothing [ Понедельник, 30 Март, 2009 13:47 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

Mozhete predlozhit' realizaciju? ;-)

Автор:  Trurl [ Понедельник, 30 Март, 2009 17:39 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

http://www.ibm.com/developerworks/webse ... xpcom.html
;-)

Автор:  Alexey Veselovsky [ Вторник, 31 Март, 2009 09:27 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

Практика показывает что с COM'ом всё на самом деле плохо. Не под виндой.
Не под виндой для подобных целей обычно использовалась CORBA, но оно конечно же с MS COM не совместимо никак.

Например для OPC, который изначально базировался на DCOM, так и нет нормальных решений под Qnx и Linux. Есть решения только через виндовозную машину, играющую роль гейта между линуксом и OPC-инфраструктурой.

Посему OPC Foundation сейчас разрабатывает (почти уже выпустила релиз соотв. спецификаций) OPC UA -- новую версию OPC никак не привязанную к столь замечательной кроссплатформенной, но привязанной к конкретной ОС, технологии как DCOM.

Благодаря отвязки от DCOM реализации OPC UA есть уже как минимум на яве, .нет, C++. ОСенезависимые реализации.

Автор:  Борис Рюмшин [ Вторник, 31 Март, 2009 11:30 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

Посему предлагаю забыть про COM совсем.

Автор:  Димыч [ Среда, 01 Апрель, 2009 00:12 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

Можно сказать, что GAPI-парсер готов. Выкладываю на всеобщее обозрение.
Скачать GAPI-parser.zip (на народе)
Вложение:
GAPI-parser.zip [775.57 КБ]
Скачиваний: 305
.

Как это все работает описано в блоге.
Простите, время пять утра, дублировать здесь не буду :roll:

Автор:  Димыч [ Пятница, 03 Апрель, 2009 02:17 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

УРА!!! ЗАРАБОТАЛО!!!

Запустилась программа HelloWorld из под ББ под Linux!
Подробности постораюсь сообщить сегодня к вечеру.

Автор:  Димыч [ Пятница, 03 Апрель, 2009 23:22 ]
Заголовок сообщения:  Программа Hello world на GTK и ББ

Выкладываю обещанные подробности

В архиве содержится собранная копия ББ, в которой при запуске выполняется код, приводящий к появлению GTK+ окна с одной кнопкой, на которой написано "Hello world"

В составе комплекта идет подсистема Gnome, представляющая собой сгенерированные файлы для библиотек GTK, GDK, Pango, Atk, GdkPixbuf.

В автоматически сгенерированном коде содержатся определения для процедур (методов), которые принадлежат каким-то объектам. Определения процедур не-методов опущены, поскольку предполагается, что в этом нет необходимости (это рассуждение для проекта Gtk#, где есть возможность использовать C код напрямую).

Поэтому для успешного запуска программы потребовалась ручная доводка.
В модуль GTK добавлены определения процедур gtk_main, gtk_main_quit. Кроме того, в код модуля GObject добавлены определения процедур g_signal_connect_data. Добавлен модуль GObjectStuff, в котором записаны процедуры g_signal_connect, g_signal_connect_swapped. Эти процедуры в коде
оригинальной системы GLib представляют собой #define определения. В ББ пришлось сделать для них отдельный модуль, поскольку у меня не получилось соединить определения библиотечных процедур (без реализации) и процедур модуля (с реализацией). Если знаете как это сделать - подскажите.

В итоге имеем приложение, запускаемое при старте ББ. Оно вызывает окно, которое правильно ведет себя в GTK-системе и реагирует на команды пользователя.

Уже немало.

Основные проблемы, с которыми пришлось столкнуться.

1) Не производится инициализация структуры Kernel.bootInfo или я неправильно понимаю, откуда брать argc и argv. Обращение к Kernel.bootInfo.arg(c|v) гарантированно ведет к трапу.

Поэтому вызов gtk_init производится в виде gtk_init(0, 0);

Что не есть правильно.

Поделитесь, кто может, информацией о старте приложения в Linux, откуда берется командная строка? Что-то про регистр BX в исходниках ББ сказано, но, это все вилами по воде писано.

2) Я не придумал как избежать обращения к SYSTEM при присваивании процедур.

В процедуру g_signal_connect одним из параметров передается указатель на процедуру. Причем сигнатура процедуры на момент вызова g_signal_connect значения не имеет, объект разбирается с сигнатурой самостоятельно в процессе работы.

Как передать в процедуру указатель на процедуру для процедур разной сигнатуры? Я не придумал.

Есть решение сделать объект с одним полем, представляющим собой указатель на процедуру и делать расширение некоего общего предка:
Код:
GCallback = EXTENSIBLE RECORD
END;

...

GMyCallback = RECORD(GCallback)
  callback: PROCEDURE ...
END;

Но тогда появляются проблемы другого рода - где-то нужна сама процедура, а где-то указател на нее. Кроме того, при работе с модулем появляется дополнительная (промежуточная) сущность. В общем это у меня не получилось, использую SYSTEM.ADR. Можно было бы спрятать использование SYSTEM в отдельный модуль, но это не решает проблему процедур разной сигнатуры. Их же как-то надо подать на вход оберточной процедуры...

3) Явно не хватает автогенерации модулей GLib и GObject.
Для того, чтобы получить перевод этих модулей с C на КП, можно использовать утилиту gapi_pp.pl (из Gtk#), которая вытаскивает из C-шных исходников определения процедур, структур, перечислений и прочего.

Затем необходимо произвести перевод из этого экстракта в удобоваримую форму или сразу на КП.

У меня руки не скоро дойдут до этого.
Впрочем, мне пока хватает того, что у меня есть (из ручной сборки). Более того, что это работает :Р

Продублировано в блоге.
Вложение:
BB-GTK-hello.tar.gz [2.79 МБ]
Скачиваний: 655

Автор:  Info21 [ Пятница, 03 Апрель, 2009 23:39 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

Димыч писал(а):
УРА!!! ЗАРАБОТАЛО!!!

Запустилась программа HelloWorld из под ББ под Linux!
Здорово.

Автор:  Сергей Оборотов [ Суббота, 04 Апрель, 2009 08:34 ]
Заголовок сообщения:  Re: Программа Hello world на GTK и ББ

Димыч писал(а):
1) Не производится инициализация структуры Kernel.bootInfo или я неправильно понимаю, откуда брать argc и argv. Обращение к Kernel.bootInfo.arg(c|v) гарантированно ведет к трапу.

Поэтому вызов gtk_init производится в виде gtk_init(0, 0);

Что не есть правильно.

Поделитесь, кто может, информацией о старте приложения в Linux, откуда берется командная строка? Что-то про регистр BX в исходниках ББ сказано, но, это все вилами по воде писано.

BX (EBX точнее) это регистр в который линкер записывает адрес списка собранных модулей. Небольшая стартовая процедура это делает. Командная строка в Linux обрабатывается при обработке запуска на исполнение. Параметры argc и argv передаются по Си-соглашению через стек, обратиться к которому можно через baseStack в модуле KERNEL.

Автор:  Борис Рюмшин [ Суббота, 04 Апрель, 2009 09:43 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

Дмитрий, а под какой сборкой Линукса вы его собирали?
Код:
command error: code file for libgtk-x11-2.0.so not found
 
****
* Error 01
* libgtk-x11-2.0.so: code file not found
****

Автор:  Alexey Veselovsky [ Суббота, 04 Апрель, 2009 10:44 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

Подтверждаю. Работает.

PS. Debian Lenny

Автор:  Сергей Оборотов [ Суббота, 04 Апрель, 2009 11:21 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

Борис Рюмшин писал(а):
Дмитрий, а под какой сборкой Линукса вы его собирали?
[code][/code]
А у Вас какая? Результат тот же.

Автор:  Alexey Veselovsky [ Суббота, 04 Апрель, 2009 11:31 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

Забавно. Народ спрашивает у других какой дистрибутив у них линукс, а при этом не говорит какой у них ;-)

Какие все стеснительные! :lol:

Автор:  Борис Рюмшин [ Суббота, 04 Апрель, 2009 11:47 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

Это я упустил. Хотя несовместимость между собой - это минус Линукс-систем.

Но похоже в моей версии и проблема: Ubuntu 8.10 x86-64. Подозреваю, что в этом самом 64 и есть проблема...

Автор:  Сергей Оборотов [ Суббота, 04 Апрель, 2009 11:54 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

Борис Рюмшин писал(а):
Подозреваю, что в этом самом 64 и есть проблема...
А 32-разрядную версию библиотеки если поставить что будет?

Страница 9 из 15 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/