51 (изменено: Freeman, 10.01.2021 в 04:51)

Re: Delphi SDK для KolibriOS (2020-2022)

0CodErr пишет:

После HeapInit перестаёт работать ReallocAppMemory.
Это всё так и задумано.
Теперь уже системная функция ReallocAppMemory очень редко используется.
Но, например, в PELoad используется.

И что делать?

0CodErr пишет:

FWAIT — всё же не стоило убирать, компилятор же их вставляет(можешь в отладчике посмотреть).

Я ориентируюсь на более современные версии Delphi. Будет время — посмотрю, какой код генерит Delphi 2007. В его System функции уже без FWAIT. В CodeGear наконец-то занялись исправлением багов.

Думаю, код коротких системных функции копировать можно. Они обусловлены логикой компилятора ни не могут быть реализованы по-другому. В System уже достаточно кода, написанного вручную, чтобы обеспечить чистоту прав. После реализации строк уже никто не скажет, что мы всё скопировали.

Прикольно, теперь при помощи KoW можно собирать приложения и под Windows, и вполне естественно они будут меньше по размеру, чем со стандартным System.

52

Re: Delphi SDK для KolibriOS (2020-2022)

Freeman пишет:

Я ориентируюсь на более современные версии Delphi. Будет время — посмотрю, какой код генерит Delphi 2007. В его System функции уже без FWAIT. В CodeGear наконец-то занялись исправлением багов.

Насколько я знаю, KolibriOS поддерживает процессоры, начиная с Pentium-a.
А для более ранних процессоров(до 486) была необходима синхронизация с помощью FWAIT\WAIT.
Но теперь, получается, что это уже не актуально.
То есть, оставлено в целях совместимости, а KolibriOS всё равно не поддерживает слишком старые процессоры(да и самих процессоров давно уж нет таких).
Да, тогда, выходит, что можно обойтись без FWAIT.

Добавлено 2021-01-10 в 09:56

https://github.com/vapaamies/KolibriOS/ … 55d6570a9a
Это должно быть в другом модуле, а не в модуле KolibriOS.
Для сборки программ под KolibriOS функция распаковки не требуется — следовательно в этом модуле ей не место.

Добавлено 2021-01-10 в 14:48

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

После HeapInit перестаёт работать ReallocAppMemory.
Это всё так и задумано.
Теперь уже системная функция ReallocAppMemory очень редко используется.
Но, например, в PELoad используется.

И что делать?

Если не вернуть как было, то ReallocAppMemory работать не будет, а она зачем-то определено в модуле KolibriOS.
Если приложение использует библиотеку, то после её загрузки вызов InitHeap уже не требуется — куча создаётся автоматически.
C другой стороны, если приложение не использует библиотеки, то придётся самостоятельно вызывать InitHeap.

У меня идея такая: когда будет готова GUI-библиотека, то при её инициализации(в блоке initialization) будет происходить при необходимости InitHeap.
Тогда в консольных приложениях куча инициализируется после загрузки библиотеки консоли.
В GUI-приложениях при инициализации модуля.
В остальных случаях — вручную.

Тогда и ReallocAppMemory можно будет использовать при необходимости, раз уж такая функция имеется.
Неизвестно ещё, как в MENUET02 реализовано, а то может вместе с TLS там и куча тоже инициализируется.

Вот так пока.
Сейчас GUI-приложения не используют никакую библиотеку дополнительно, только сис. функции — можно оставить InitHeap вручную.
Когда в uses добавится модуль GUI-библиотеки(что-то типа uses KolibriOS, GUI2D;), то в этом модуле будет происходить инициализация.

53 (изменено: Freeman, 19.06.2023 в 20:49)

Re: Delphi SDK для KolibriOS (2020-2022)

Модератор: обсуждение тригонометрических функций в Delphi 2007 отделено.

В разделе Writing own programs рассказывается о том, что необходимо сделать для сборки своего собственного проекта.
Но это немного долгая история с переименованием и копированием(нам ведь желательно, чтобы название проекта имело своё имя, а не просто Program1):

  • нужно скопировать папку с проектом(GUI или Console)

  • переименовать эту папку в NewProject

  • переименовать название проекта в папке NewProject.dpr

  • переименовать название проекта в исходнике program NewProject;

  • внутри файла build.bat тоже потребуется переименование

Возможно, полезно будет иметь в папке "My" два командных файла NewProjectGUI.bat и NewProjectConsole.bat, запустив которые и введя один раз имя нового проекта, можно создать папку с новым проектом и необходимыми файлами, после чего папка с проектом  будет открыта в проводнике Windows.

Примерное содержание файла NewProjectConsole.bat
@echo off

:SetName
set /p NewProject="Enter project name: "
if exist %NewProject% (
  @echo %NewProject% already exist!
  goto :SetName
)
mkdir %NewProject%
cd %NewProject%

@echo @call "%%~dp0..\..\Lib\build.bat" "%%~dp0%NewProject%"> "build.bat"
@echo @pause>> "build.bat"

@echo program %NewProject%;> "%NewProject%.dpr"
@echo: >> "%NewProject%.dpr"
@echo {$APPTYPE CONSOLE}>> "%NewProject%.dpr"
@echo: >> "%NewProject%.dpr"
@echo uses>> "%NewProject%.dpr"
@echo   CRT;>> "%NewProject%.dpr"
@echo: >> "%NewProject%.dpr"
@echo begin>> "%NewProject%.dpr"
@echo   WriteLn('Hello, this is a %NewProject%!');>> "%NewProject%.dpr"
@echo end.>> "%NewProject%.dpr"

explorer %~dp0%NewProject%
Примерное содержание файла NewProjectGUI.bat
@echo off

:SetName
set /p NewProject="Enter project name: "
if exist %NewProject% (
  @echo %NewProject% already exist!
  goto :SetName
)
mkdir %NewProject%
cd %NewProject%


@echo @call "%%~dp0..\..\Lib\build.bat" "%%~dp0%NewProject%"> "build.bat"
@echo @pause>> "build.bat"

@echo program %NewProject%;> "%NewProject%.dpr"
@echo: >> "%NewProject%.dpr"
@echo uses>> "%NewProject%.dpr"
@echo   KolibriOS;>> "%NewProject%.dpr"
@echo: >> "%NewProject%.dpr"
@echo var>> "%NewProject%.dpr"
@echo   WndLeft, WndTop, WndWidth, WndHeight: LongInt;>> "%NewProject%.dpr"
@echo: >> "%NewProject%.dpr"
@echo begin>> "%NewProject%.dpr"
@echo   with GetScreenSize do>> "%NewProject%.dpr"
@echo   begin>> "%NewProject%.dpr"
@echo     WndWidth := Width div 4;>> "%NewProject%.dpr"
@echo     WndHeight := Height div 4;>> "%NewProject%.dpr"
@echo     WndLeft := (Width - WndWidth) div 2;>> "%NewProject%.dpr"
@echo     WndTop := (Height - WndHeight) div 2;>> "%NewProject%.dpr"
@echo   end;>> "%NewProject%.dpr"
@echo: >> "%NewProject%.dpr"
@echo   while True do>> "%NewProject%.dpr"
@echo     case WaitEvent of>> "%NewProject%.dpr"
@echo       REDRAW_EVENT:>> "%NewProject%.dpr"
@echo         begin>> "%NewProject%.dpr"
@echo           BeginDraw;>> "%NewProject%.dpr"
@echo           DrawWindow(WndLeft, WndTop, WndWidth, WndHeight, '%NewProject%', $00FFFFFF,>> "%NewProject%.dpr"
@echo             WS_SKINNED_FIXED + WS_CLIENT_COORDS + WS_CAPTION, CAPTION_MOVABLE);>> "%NewProject%.dpr"
@echo           EndDraw;>> "%NewProject%.dpr"
@echo         end;>> "%NewProject%.dpr"
@echo       KEY_EVENT:>> "%NewProject%.dpr"
@echo         GetKey;>> "%NewProject%.dpr"
@echo       BUTTON_EVENT:>> "%NewProject%.dpr"
@echo         if GetButton.ID = 1 then>> "%NewProject%.dpr"
@echo           Break;>> "%NewProject%.dpr"
@echo     end;>> "%NewProject%.dpr"
@echo end.>> "%NewProject%.dpr"

explorer %~dp0%NewProject%

На всякий случай приложу сами bat-ники.

Модератор: обсуждение лицензий отделено.

Модератор: продолжение спора о строковых типах отделено.

Модератор: обсуждение поддержки Delphi 4-5 отделено.

Post's attachments

Иконка вложений NewProjectConsole.bat+NewProjectGUI.bat.7z 816 b, 70 скачиваний с 2022-01-18 

54

Re: Delphi SDK для KolibriOS (2020-2022)

Тема превратилась в помойку (тему обо всём). Распилил последнее сообщение и закрыл. Теперь под SDK — целый раздел.

Скрипты сборки будут перерабатываться. Должны, по крайней мере. Если это буду делать я — учту. А вообще у нас уже целых две темы про Git: про GitHub и GitFlic. Я — за самостоятельность. roll