Евгений Темиргалеев писал(а):
Решил начать отдельную тему, так сказать с чистого листа, хотя задача суть та же, что и обозначена в
viewtopic.php?f=102&t=3540.
Привожу оговоренный вчера (
http://www.inr.ac.ru/~info21/nov.htm) план действий: формирование полноценной сборки консольного каркаса ББ под линух, т.е. обеспечение функционирования в консоли:
System/Docu/Sys-map
Код:
Map to the BlackBox Core
BlackBox Component Framework
Containers Controls
Properties
Controllers Printing
Views
Converters Models Ports
Stores Fonts
BlackBox Component Library
Integers
Files Dialog
Math Strings Dates
Services Meta
Задача поделена на три подзадачи и пакет будет публиковаться частями, по мере решения каждой:
1) "Пускач": суть остановились на способе (2) (статическая линковка Сишного пускача с дин. библиотекой), следуя критерию минимальности исходника сишного пускача (
viewtopic.php?f=102&t=4089). Доделать/дооформить правки Kernel, HostFiles и инструкцию сборки. В качестве добавки сюда пойдёт (для примеров) LinSimpleConsole (и если что ещё есть в пакете lin-simple-console)
2) Проанализировать и составить полный список требующих реализации хуков BBCF и BBCL. Реализовать недостающие и доработать имеющиеся реализации хуков, в том числе набор затычек, которые закрывают обращение компонентов BBCF и BBCL к "рисованию".
3) Доработать (дооформить, документировать) имеющиеся реализации чисто-консольных компонентов для линуха (реализацию CommTCP и подобное).
---
Оформление также обязательно подразумевает работу по выявлению (по возможности) и перечислению работы всех контрибуторов.
С загрузчиком определились, осталось только разобраться с загрузчиком на основе Си (LinLinker). Их на самом деле два -- оригинальный LinLinker и DevBootLinker Trurl-а, декабря 2006-го года. Надо разобраться, какой лучше, и включить в сборку. Только в DevBootLinker, а не LinLinker.
Для загрузчика, основанного на ELF: Kernel_so_init.SetKernelBaseStack использовать нет необходимости в случае, если из libBB.so не вызывать экспортируемых процедур (т. е. для libBB.so := Kernel$+ Files HostFiles StdLoader не требуется). Если вызывать экспортируемую процедуру, то внутри неё можно вызывать Kernel.Start вместо использования Kernel_so_init.SetKernelBaseStack, т. к. в Kernel.Start устанавливается новое значение baseStack (SYSTEM.GETREG(SP, baseStack)).
Модули подсистемы Comm (CommTCP, CommV24) реализованы.
Модули BBCL работают.
Из BBCF полноценно работают Converters, Models, Ports, Stores.
Подсистема Text работает в "слепом" режиме (т. е. работает, но на экране ничего не отображается).
DevCompiler.CompileThis, DevLinker, DevElfLinker -- работают полноценно.
Локализация (в т. ч. русский язык) работает.
Работоспособность проверена на ОС:
GNU/Linux: Fedora Core 17, Ubuntu 12.04 LTS
OpenBSD 5.2
FreeBSD 9.0
Поддержку других операционных систем (NetBSD, DragonflyBSD, Mac OS X, Minix3?, Solaris?) сделать не сложно (особенно если они поддерживают формат ELF).
HostPackedFiles -- реализован, DevPacker работает.
Из нужного ещё остаётся Printing -- не реализовано.
Ещё до сих пор не доделана реализация обработки исключений по переполнению стека в Kernel. Может быть в Linux это легко исправить, в OpenBSD -- точно нет. Я
написал им письмо, они ответили, что это ошибка в операционной системе, пока не исправили.
Я больше не буду заниматься консольной версией, т. к. из нужного всё работает, кроме печати, и переключаюсь на GUI-верию.