Page 6 of 8

Re: FreePascal

Posted: Fri Feb 12, 2021 9:46 pm
by Doczom
Попытался реализовать модуль для работы с сокетами. Примеры сервера и клиента не работают(сервер завершает работу при связывании с адресной структурой, клиент почти не тестировался, но тоже 0 результата). Вывод сервера происходит в доску отладки(работает криво, через раз). Всё компилировал из КОС

Re: FreePascal

Posted: Sat Feb 13, 2021 2:24 am
by bw
Привет.
Гляну до конца следующей недели.

..bw

Re: FreePascal

Posted: Sat Feb 13, 2021 2:51 pm
by Doczom
просмотрел kos.inc и составил список сисфункций, которые там отсутствуют:

74, 75, 76, 77, 80, 73, 72, 71, 70(4,6,8,9), 69, 68(0,2,3,4,14,17,18,19,20,22,23,24,25,26,27,28),66(3,4,5,6,7),
62(0,2,8,9,10){не точно}, 61(1,2,3), 54(0,1,2,3,4), 50, 49, 48(0,1,2,3,4,5,6,7,8,9,10,11,12,13), 47, 46(ebx=1),
39(1,2,4), 37(3,4,5,6,7,8), 36, 35, 34, 30(3,4,5), 26(1,2,5,10,11,12), 25, 24(4,5), 22, 21(1,2,5,11), 20(1,2),
18(1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,22,23,24,25), 16, 15(1,2,3,4,5,6,7,8,9), 11, 8

я пытался уже реализовать сисфункции 74, 54, пока ещё не тестировал

Re: FreePascal

Posted: Sun Feb 21, 2021 12:47 am
by Doczom
В реализации сокетов ошибки(во всех функциях) в передаче параметров для вызова сисфункции,
а также провёл несколько тестов, в которых сервер завершает работу при вызове функции bind, код ошибки,
который записан в регистре ebx равен 4

Re: FreePascal

Posted: Fri Mar 05, 2021 5:15 pm
by bw
! fpc.kex не работает (ppc386.kex рабочий) !
! ${apptype gui} не работает !

Немного обновлений: Терминал

Реализован примитивный и кривой терминал, который доступен при сборке консольных приложений (по-умолчанию): {$apptype console}. Что-бы этой дряни не было, нужно собирать в режиме GUI: {$apptype gui}.

Терминал создаётся первым консольным fpc-приложением, все остальные (консольные fpc-приложения), запускаемые через ExecuteProcess или TProcess, используют его, а не создают свой экземпляр.

Особенности:
  • запускается в отдельном потоке и для завершения требует явного закрытия, иначе процесс приложения продолжит работать (ждать завершения потока терминала);
  • ввод отсутствует;
  • при завершении процесса (главного потока) в заголовок окна выводится код завершения, информация о других процессах, использующих этот терминал не доступна;
  • закрытие окна выполняется кнопкой, Alt-F4 или Ctrl-Q, при этом все потоки и процессы завязанные на этот терминал продолжат работать (вероятно, подвисая на выводе, не проверялось), никаких сигналов никому не посылается;
  • связь с терминалом (как можно догадаться) строго одностороняя.
См. реализацию в RTL в "kolibri/sysinitconsole.pp" и "kolibri/kos_term.inc". Кроме RTL, изменения вносились и в сам компилятор.
См. примеры "misc/xpc1.pp" и "misc/xpc2.pp" (xpc1.kex запускает xpc2.kex и оба выводят в один терминал).

Переменные окружения

Переменные либо передаются через TProcess при запуске, либо читаются из файлов "/sys/settings/.environ" и из ".environ", находящегося в корне диска с приложением, при этом значения из последнего файла имеют больший приоритет.
Поддерживается элементарная sh-подобная подстановка, пример файла "/hd0/1/.environ":

Code: Select all

FPCROOT=/hd0/1/fpckos-2.4.4
FPCDIR=$FPCROOT/lib/fpc/2.4.4
PATH=/sys:$FPCROOT/bin:$FPCDIR
Из бонусов: теперь можно пользоваться "PATH", эта переменная обрабатывается в ExecuteProcess и в TProcess (так по задумке, но особо не проверял).

См. реализацию в RTL в "kolibri/sysinitkos.inc" и "kolibri/kos_xpc.inc", и в пакете "fpc-process".
См. примеры "misc/xpc1.pp" и "misc/xpc2.pp" (xpc1.kex запускает xpc2.kex с набором переменных окружения).

Windows ресурсы

Для компиляции RC в RES всё так же нужен windres, в Linux его можно найти в пакетах mingw32, для Windows утилита входит в состав FPC. Компилятору можно явно указать на эту утилиту ключём "-FC". В примерах RC предварительно был конвертирован в RES руками, а в самих исходниках в директиве {$r ...} указывается не RC, а RES.

API реализован (спустя рукава). Поддержки языков нет.

См. реализацию в RTL в "inc/fpintres.pp", "int/sysres.inc" и "kolibri/kos_winres.inc". Кроме RTL, изменения вносились и в сам компилятор.
См. примеры "misc/resdevel.pp" и "misc/resapp.pp".

..bw

Re: FreePascal

Posted: Tue Mar 16, 2021 4:35 pm
by Doczom
Добрый вечер, компилятор последней версии падает в кос при попытки компиляции тестовой программы.
команду вводил такую: ./bin/fpc.kex test_client_for_sockets.pp
в самом файле компилируемой программы ошибок нет(на 95%),
но консоль запустилась, это очень хорошо

возможно я компилировал неправильно

Re: FreePascal

Posted: Tue Mar 16, 2021 7:36 pm
by bw
Покажи, что в ".environ" (он должен быть в корне ФС, хотя его отсутствие не должно приводить к падению) и "build.sh". И какая ревизия ОС (у меня 8329)? Там никакого вывода в терминале и [User] нет?
Я особо под Kolibri не тестировал. Просто проверил факт запускаемости "fpc.kex" из под KFar. Собираю всё под Linux через fpcmake и make.
Завтра посмотрю.

p.s. У меня тоже не работает. А до этого обновления работало :-) ?

..bw

Re: FreePascal

Posted: Tue Mar 16, 2021 8:20 pm
by Doczom
во вкладке user доски отладки ничего, ядро версии 8552, если без без файла загружать fpc.kex то в доске отладки будет сообщение об отсутствии файла(не точно),ppc386.kex вроде работает

Re: FreePascal

Posted: Tue Mar 16, 2021 8:22 pm
by Doczom
а консоль же не через console.obj написана?

Re: FreePascal

Posted: Tue Mar 16, 2021 8:32 pm
by bw
Это не поможет с fpc.kex, но так правильнее (FPCDIR должен указывать на директорию с ppc386.kex и units):

Code: Select all

#.environ
FPCROOT=/hd0/1/fpckos-2.4.4
FPCDIR=$FPCROOT/lib/fpc/2.4.4
FPC=$FPCDIR/ppc386.kex
PATH=/sys:$FPCROOT/bin:$FPCDIR
p.s. Сейчас у режима ${apptype gui} есть косяк, не используй его.
p.p.s. Консоль (терминал) самодельный. Это fallback до лучших времён.

..bw

Re: FreePascal

Posted: Tue Mar 16, 2021 9:27 pm
by Doczom
а где в fpc для винды(линукса) находится реализация сокетов Беркли? , просто свой костыль для сети , криво переписанный с СИ,
работает не совсем корректно.
с консолью можно сделать как gui приложение, но в котором будет загружаться console.obj, и при {$apptype console} просто добавлять в программу модуль kos_console и вызов загрузочной функции ?

Re: FreePascal

Posted: Tue Mar 16, 2021 9:35 pm
by Doczom

Code: Select all

function load_dll(var path:string):pointer;
var path_pointer:pointer;
begin
path:=path+#0;
path_pointer:=@path;
inc(path_pointer);
  asm
  pushl %ebx
  pushl %ecx
  movl path_pointer,%ecx
  movl $68,%eax
  movl $19,%ebx
  int $0x40
  movl %eax,path_pointer
  end;
load_dll:=path_pointer;
end;
не тестил

Re: FreePascal

Posted: Wed Mar 17, 2021 6:43 pm
by bw
В основном исправления: Файл с конфигурацией "fpc.cfg" будет искаться по следующим путям (или не будет):
  • ./fpc.cfg
  • $HOME/fpc.cfg
  • $PPC_CONFIG_PATH/fpc.cfg
  • /sys/settings/fpc.cfg
Пример конфига (есть в бинарном архиве):

Code: Select all

# Write always a nice FPC logo ;)
-l
# Display Info, Warnings and Notes
-viwn
Для переменных окружения появилось магическое слово __HERE__, это директория, в которой находится ".environ":

Code: Select all

FPCROOT=$__HERE__/fpckos-2.4.4
FPCDIR=$FPCROOT/lib/fpc/2.4.4
PPC_CONFIG_PATH=$FPCROOT
PATH=/sys:$FPCROOT/bin:$FPCDIR
..bw

Re: FreePascal

Posted: Sun Apr 25, 2021 8:37 pm
by Doczom
что нужно для порта FPC сделать?

Re: FreePascal

Posted: Mon Apr 26, 2021 1:55 am
by Doczom
что-то опять не работает))
версия: Последняя(210317)
не компилится программа