1

Тема: KolibriOS on Windows (KoW)

Думается, для упрощения отладки нужно иметь реализацию базовых функций KolibriOS под Windows. Так можно будет ходить пошагово и смотреть, где баг. Для начала достаточно всего нескольких функций, используемых нашими программами:

procedure DrawWindow(Left, Top, Width, Height: LongInt; Caption: PKolibriChar; BackColor, Style, CapStyle: LongWord);
procedure DrawText(X, Y: LongInt; Text: PKolibriChar; ForeColor, BackColor, Flags, Count: LongWord);
procedure DrawButton(Left, Top, Width, Height: LongInt; BackColor, Style, ID: LongWord);
procedure DrawRectangle(X, Y: LongInt; Width, Height: LongWord; Color: LongWord);
procedure SetPixel(X, Y: LongInt; Color: LongWord);

function GetKey: TKeyboardInput;
function GetButton: TButtonInput;
function WaitEvent: LongWord;
function WaitEventByTime(Time: LongWord): LongWord;

function GetScreenSize: TSize;
function GetThreadInfo(Slot: LongWord; var Buffer: TThreadInfo): LongWord;

Если сделать базовую обвязку, остальные функции можно добавлять по мере надобности. Файловые функции добавлю я сам. Они сейчас в процессе переосмысления для внедрения Unicode и реализации строк.

Добавлено 2021-01-08 в 19:59

Выложил концепт на GitHub, пока в отдельной ветке.

2

Re: KolibriOS on Windows (KoW)

О, ну наконец-то и до тебя это дошло smile
Хотя я уже давал ссылку http://kolibriosandfasm.mybb.ru/viewtopic.php?id=24
Успел ли ты скачать нужный файл и ознакомиться?
Просто в данный момент загруженный архив не доступен для скачивания, если есть необходимость, то я выложу в этой теме.

3

Re: KolibriOS on Windows (KoW)

0CodErr пишет:

Успел ли ты скачать нужный файл и ознакомиться?

Нет, не скачал. Выложи.

Уже есть первый результат KoW. В программе ConBoard был баг: в некоторых случаях Prefix не был заполнен, и выводился мусор. Например, если первым на доске отладки идет сообщение от программы, а не от ядра. Исправил. Сишные строки — зло.

Уменьшил также нагрузку на процессор под KolibriOS, теперь ConBoard можно использовать как штатную программу. Нормальный шрифт и подсветка рулят.

4

Re: KolibriOS on Windows (KoW)

Пример, который можно скомпилировать и под Windows, и под KolibriOS.
Исходный код при этом остаётся без изменений.

Использовался код из KEm и KolibriOS.Lib.

Test.dpr — исходник

  • make(For KolibriOS).bat — для сборки под KolibriOS

  • make(For Windows).bat — для сборки под Windows

После успешной сборки в папке рядом с Test.dpr должен появиться файл собранного приложения(kex или exe).

Исходный код примера:

(* -------------------------------------------------------- *)
Uses KolibriOS;
(* -------------------------------------------------------- *)
Procedure On_Redraw;
Begin
  BeginDraw;
  DrawWindow(100, 50, 200, 150, 'Hello!', $00FFFFFF, WS_SKINNED_FIXED + WS_COORD_CLIENT + WS_CAPTION, CAPTION_MOVABLE);
  DrawText(10, 5, 'My text', $000F0F00, $0000F0F0, DT_ZSTRING + DT_FILL_OPAQUE + DT_CP866_8X16, 0);
  DrawLine(20, 30, 50, 30, $0000AFAF);
  DrawRectangle(25, 35, 40, 20, $00FF0FAF);
  EndDraw;
End;
(* -------------------------------------------------------- *)
Procedure On_Key;
Begin
  GetKey;
End;
(* -------------------------------------------------------- *)
Procedure On_Button;
Begin
  Case GetButton().ID Of
    1: ThreadTerminate;
  End;
End;
(* -------------------------------------------------------- *)
Begin
  While TRUE Do Begin
    Case WaitEvent() Of
      REDRAW_EVENT: On_Redraw;
      KEY_EVENT:    On_Key;
      BUTTON_EVENT: On_Button;
    End;
  End;
End.

Файл скина default.skn используется в exe под Windows и подгружается во время запуска из папки с приложением, не удаляйте его оттуда.
Хотя можно при желании использовать другой путь к скину.
Если хочется добавить недостающие функции, то их можно скопировать из KEm.

Скомпилировав данный пример, можно одновременно запустить полученные приложения test.exe и test.kex(из-под эмулятора) — у вас будет 2 одинаковых окошка smile

Post's attachments

Иконка вложений Test_Delphi7_dpr_exe2kos_KolibriOS_Windows.7z 100.64 Кб, 107 скачиваний с 2021-01-10 

5

Re: KolibriOS on Windows (KoW)

А как быть с библиотеками Колибри под KoW (в первую очередь LibImg)? Что делает loaddll.obj из дистрибутива?

6

Re: KolibriOS on Windows (KoW)

Freeman пишет:

Что делает loaddll.obj из дистрибутива?

То же самое, что и в проекте KEm — загружает библиотеку KolibriOS формата MSCOFF.
loaddll.obj, как и остальные функции, взяты из этого проекта.
Недостающие можно скопировать оттуда.

Freeman пишет:

А как быть с библиотеками Колибри под KoW (в первую очередь LibImg)?

Проблема только с Console.obj — приложения, её использующие, имеют как минимум 2 потока, а многопоточность в KEm на данный момент не реализована.
LibImg по идее работать должна — там только функции, новых потоков не создаётся.

Можно, скажем, скрестить код библиотеки GUI и этого проекта — и можно собирать GUI приложения и под Windows, и под KolibriOS.

7

Re: KolibriOS on Windows (KoW)

Вот вопрос и был в том, можно ли собрать оригинальные библиотеки KolibriOS в виде DLL и грузить их в KoW штатным виндовым порядком?

8 (изменено: 0CodErr, 25.03.2021 в 01:34)

Re: KolibriOS on Windows (KoW)

Только не понятно зачем именно это нужно?
Теоретически всё можно.
Но это всё долгая история.
Некоторые библиотеки импортируют функции из других библиотек.
Гораздо проще грузить уже готовые MSCOFF библиотеки, в KEm есть нужные функции.

Хотя если хочешь попробовать PE, то вот Console в формате PE, а вот для сравнения MSCOFF

Всё-таки, наверное, толку от библиотек мало.
Ведь большинство из них внутри себя используют системные вызовы KolibriOS и "не знают", что их кто-то будет пытаться запустить под Windows.
А тут изначально под 2 системы писалось.
Разве что такие как iconv.dll будут работать(у меня на компьютере нашлась такая dll-ка размером 1,35 МБ)

9

Re: KolibriOS on Windows (KoW)

0CodErr пишет:

Гораздо проще грузить уже готовые MSCOFF библиотеки, в KEm есть нужные функции.

Чем проще?

Идея KoW — возможность компиляции под обе платформы из одних исходников, как в целях отладки, так и нет. Delphi не поддерживает ведущие приложения (host application) для приложений, не библиотек. Как отлаживать приложения, использующие библиотеки?

10 (изменено: 0CodErr, 27.03.2021 в 12:56)

Re: KolibriOS on Windows (KoW)

Freeman пишет:
0CodErr пишет:

Гораздо проще грузить уже готовые MSCOFF библиотеки, в KEm есть нужные функции.

Чем проще?

Так как они уже написаны и скомпилированы.

Freeman пишет:

Идея KoW — возможность компиляции под обе платформы из одних исходников

Тут абсолютно такая же идея.

Freeman пишет:

Как отлаживать приложения, использующие библиотеки?

Библиотеки должны быть также написаны под обе платформы(или быть кросплатформенными).
Другой вариант — реализовать интерфейс под обе платформы, а в реализации может использоваться совсем другая библиотека.
Для примера можно привести код из SysUtils

uses
{$IFDEF MSWINDOWS}
Windows,
{$ENDIF}
{$IFDEF LINUX}
Types,
Libc,
{$ENDIF}
SysConst;

или из QForms

uses
{$IFDEF LINUX}
  Xlib,
{$ENDIF}
{$IFDEF MSWINDOWS}
  Windows, Messages,
{$ENDIF}
  Qt, QTypes, SysUtils, Classes, Types, QGraphics, QControls, QMenus,
  QActnList, QStyle, HelpIntfs;

Если необходима именно отладка, то лучше подойдёт KEm, так как он грузит стандартные библиотеки MSCOFF и эмулирует системные вызовы, использующиеся в этих библиотеках.

Тут пример

отладочного вывода в консоль

file.php?id=8545

Можно ещё собирать приложения с базовым адресом 64K, и это работает, Для Oberon-07 тоже

Для 64=битных систем нужен параметр реестра(но я не проверял это).

Вон там тоже проще оказалось сделать самодельный терминал не через Console.obj, хотя в перспективе можно добиться сборки под несколько платформ(а Console.obj — только по KolibriOS).

В общем, всё зависит от цели: для многоплатформенных приложений библиотеки тоже должны быть под разные платформы, для отладки — подойдёт и запуск в эмуляторе API.
Но, кстати сказать, в KolibriOS не настолько много широко используемых полезных библиотек.