1

Тема: Примеры Delphi 7 под KolibriOS

Посмотрел примеры, выложенные на форуме KolbiriOS. Смотрел только скриншоты. Понравились визуальные примеры, связанные с отображением графики и курсоров. Хочу их позаимствовать, и к следующей версии PE Tool сделать полноценный SDK с адаптированными примерами. Их лицензия тоже BSD? Если по лицензии нет разногласий, залью выбранные примеры на GitHub.

2

Re: Примеры Delphi 7 под KolibriOS

Их лицензия тоже BSD? Если по лицензии нет разногласий, залью выбранные примеры на GitHub.

И на примеры ещё нужна что ли лицензия :-) Я не против, пусть BSD.
Вопрос в том, что всё-таки приоритетнее: тот способ сборки с помощью omf2d или же с помощью exe2kos?

Способ с omf2d:
используется библиотека KolibriOS.lib(архив с объектниками по сути), которую можно также использовать не только с Delphi и примеры тоже есть
Для сборки нужно: DCC32, OMF2D, OMF2COFF, LD, OBJCOPY

Способ с exe2kos:
используется модуль KolibriOS.pas, который подключается только к Delphi(возможно FreePascal)
для сборки нужно: DCC32, PET, EXE2KOS

Хочется не только для Delphi, а ещё хотя бы для С, UASM, Modula\Oberon.
Хочется, чтобы на FreePascal тоже работало, как на Delphi.
Возможно, с помощью директивы {$INCLUDE filename} всё же можно что-то придумать.

Кое-что было дополнено в KolibriOS.lib, но пока ещё не было выложено.
Планируются ещё дополнения, также нужны примеры.

3

Re: Примеры Delphi 7 под KolibriOS

Примеры со скриптами сборки загружены на GitHub. Пришлось сделать force push, — коммит с RTL изначально был кривой. Всё собирается и почти работает в Колибри. Почему-то не работают приложения DrawImageEx и Screenshot.

4 (изменено: 0CodErr, 22.05.2020 в 03:49)

Re: Примеры Delphi 7 под KolibriOS

При компиляции System была ошибка.
Ты этот модуль изменил и что-то стало не правильно, возможно с типами проблема.

Я уже писал также про необходимость доработок board.kolibrios.org/viewtopic.php?f=33& … 299#p72299
я кое-что делал уже

DrawImageEx
Unit DrawImageEx_;
(* -------------------------------------------------------- *)
Interface
(* -------------------------------------------------------- *)
Uses KolibriOS;
(* -------------------------------------------------------- *)
{65}      Procedure DrawImageEx(Const Image; Left, Top: Integer; Width, Height: Dword; BPP: Dword; Const Palette; Padding: Dword); StdCall;
(* -------------------------------------------------------- *)
Implementation
(* -------------------------------------------------------- *)
{65}      Procedure DrawImageEx(Const Image; Left, Top: Integer; Width, Height: Dword; BPP: Dword; Const Palette; Padding: Dword); StdCall;
          Asm
                  push   ebx
                  push   esi
                  push   edi
                  mov    eax, 65
                  mov    ebx, Image
                  mov    ecx, Width
                  mov    edx, Left
                  shl    ecx, 16
                  shl    edx, 16
                  or     ecx, Height
                  or     edx, Top
                  mov    esi, BPP
                  mov    edi, Palette
                  mov    ebp, Padding
                  int    64
                  pop    edi
                  pop    esi
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
End.
Blit
Unit Blit_;
(* -------------------------------------------------------- *)
Interface
(* -------------------------------------------------------- *)
Uses KolibriOS;
(* -------------------------------------------------------- *)
{73}      Procedure Blit(Const Src; SrcX, SrcY: Integer; SrcW, SrcH: Dword; DstX, DstY: Integer; DstW, DstH: Dword; Stride, Flags: Dword); StdCall;
(* -------------------------------------------------------- *)
Implementation
(* -------------------------------------------------------- *)
{73}      Procedure Blit(Const Src; SrcX, SrcY: Integer; SrcW, SrcH: Dword; DstX, DstY: Integer; DstW, DstH: Dword; Stride, Flags: Dword); StdCall;
          Asm
                  push   ebx
                  push   Stride
                  push   Src
                  push   SrcH
                  push   SrcW
                  push   SrcY
                  push   SrcX
                  push   DstH
                  push   DstW
                  push   DstY
                  push   DstX
                  mov    eax, 73
                  mov    ebx, Flags
                  mov    ecx, esp
                  int    64
                  add    esp, 40
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
End.

Ну и я писал уже про

0CodErr пишет:

Некоторые функции всё ещё содержат неточности, например, вот эти сетевые board.kolibrios.org/viewtopic.php?f=11& … 578#p70578 он говорит, да, это issue, но вот что с эти делать пока неизвестно.

Screenshot — зависает на ResizeImage из-за

      Inc(B, 2);
    end;
    Inc(B, 2);
  end;

во втором случае должно быть

    Inc(A, 2);

также ошибка тут

      Preview[i].Red := (Red(A, B) + Red(B + 1, B) + Red(A, B + 1) + Red(A + 1, B + 1)) div 4;

изначально было

ImagePreview[i].Red   := (SrcR(a, b) + SrcR(a + 1, b) + SrcR(a, b + 1) + SrcR(a + 1, b + 1)) Shr 2;

вместо "Red(B + 1, B)" следует писать "Red(A + 1, B)"

5

Re: Примеры Delphi 7 под KolibriOS

Screenshot исправил. Работает. С DrawImageEx непонятно что делать. Нет времени разбираться. Присылай pull request. Можешь форкнуть репозитарий, делать изменения у себя и присылать pull request-ы через интерфейс GitHub.

6

Re: Примеры Delphi 7 под KolibriOS

Выше я выкладывал два исправленных модуля DrawImageEx и Blit, там раньше регистры не сохранялись.
Поскольку ты изменяешь код, то что-то может работать неправильно.
У тебя так:

  with GetScreenSize do
  begin
    Right := Width div 4;    <---------
    Bottom := Height div 4;
    Left := (Width  - Right) div 2;
    Top := (Height - Bottom) div 2;
  end;

изначально было так

  With Window Do Begin
    With Screen Do Begin
      Right  := 340;    <---------
      Bottom := Height Shr 2;
      Left   := (Width  - Right)  Shr 1;
      Top    := (Height - Bottom) Shr 1;
    End;
  End;

У меня эти примеры все оттестированы были и работали.
По поводу DrawWindow и DrawButton уже писал, что там вместо Right и Bottom должно быть Width и Height.
Вместо

AppPath = PPKolibriChar(32);

нужно сделать

AppPath = PPChar(32);

тип Char должен быт объявлен в модуле KolibriOS.

Раньше всё было проверено и работало, если сейчас менять код, то придётся с нуля всё опять тестировать.
Тогда в этом случае желательно сразу делать правильно.

  ExtractFileDirectory(AppPath^, AppPath^);

тут не ясно, оставить ли такой хак, у нас тут "Src = Dst". Но оно так работает вполне.
Хотя по идее, думаю, нужен второй буфер.

Добавлено 23.05.2020 в 20:22

Padding1 := (32 - biWidth * biBitCount mod 32) and not 32 div 6;

div 6 — это что вообще?

Зачем коверкать изначально работающие формулы

Padding1 := (32 - biWidth * biBitCount Mod 32) And Not 32 Shr 3;

7

Re: Примеры Delphi 7 под KolibriOS

0CodErr пишет:

Зачем коверкать изначально работающие формулы

Это учебный проект. Стараюсь держать его максимально простым. Ориентируюсь на условного Alex2003.

8

Re: Примеры Delphi 7 под KolibriOS

Freeman пишет:

Примеры со скриптами сборки загружены на GitHub.

По поводу build-examples.bat, почему бы не сделать вот так

for /D %%f in (*) do (
    cd %%f
    call build.bat
    cd ..\
)

Добавлено 23.05.2020 в 22:04

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

Зачем коверкать изначально работающие формулы

Это учебный проект. Стараюсь держать его максимально простым. Ориентируюсь на условного Alex2003.

Я к тому, что теперь они НЕ работающие.

9

Re: Примеры Delphi 7 под KolibriOS

0CodErr пишет:

По поводу build-examples.bat, почему бы не сделать вот так

Сделал.

0CodErr пишет:

Я к тому, что теперь они НЕ работающие.

Тороплюсь, по ночам работаю. Всё в порядке. Загрузил на GitHub.

10 (изменено: Freeman, 05.12.2020 в 17:42)

Re: Примеры Delphi 7 под KolibriOS

Там ещё в Screenshot надо исправить тут

    Preview := HeapAllocate(Width * Height * 3 div 2);

вместо "div 2" написать "div 4"
Потому что размер Preview равен(ширина х высота): (Width/2) x (Height/2)

Добавлено 2020-06-24 в 15:00

В примере DateTime ты добавил тут 'System Date and System Time' два пробела между словами.
Теперь нижняя строка стала не по центру относительно верхней.
Нужно там тоже добавить пробелы вокруг дефисоминуса, вот так: '  -  %02x:%02x:%02x'

По поводу Screenshot также ещё актуально.

Добавлено 2020-08-18 в 16:06

Сейчас после компиляции примеров полученные приложения находятся в папке "bin".
Кроме приложений туда попадают также и другие файлы(например, изображения), и получается всё в кучу.
Может лучше создавать для каждого примера свою папку?
Или даже вообще компилировать в папку с исходником?

Почему-то размер kpack.exe целых 290 КБ, в то время как размер аналогичной несжатой программы под KolibriOS всего 15 КБ.
С чем это связано? Можно ли как-то пересобрать kpack.exe, уменьшив его размер?

Добавлено 2020-08-18 в 16:26

Я проверил сейчас каждый exe-файл из релиза, и на kpack.exe ругаются больше всего.

По поводу VirusTotal уже ранее упоминалось в теме Releases.

Вот результаты проверки:

Добавлено 2020-11-11 в 16:13

На данный момент существует уже несколько примеров использования SDK, как на форуме, так и на GitHub.
Планируется продолжать это делать и в дальнейшем.
Возможно, интересуют какие-то более специфические примеры использования KolibriOS API?
Если да, то такие примеры будут в большем приоритете.
Я думаю, что можно прямо в этой теме составить список, а после этого уже будут созданы и сами примеры.