FreePascal

High-level languages programming questions
  • Привет.
    Гляну до конца следующей недели.

    ..bw
  • просмотрел 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, пока ещё не тестировал
  • В реализации сокетов ошибки(во всех функциях) в передаче параметров для вызова сисфункции,
    а также провёл несколько тестов, в которых сервер завершает работу при вызове функции bind, код ошибки,
    который записан в регистре ebx равен 4
  • ! 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
    Last edited by bw on Tue Mar 16, 2021 8:54 pm, edited 1 time in total.
  • Добрый вечер, компилятор последней версии падает в кос при попытки компиляции тестовой программы.
    команду вводил такую: ./bin/fpc.kex test_client_for_sockets.pp
    в самом файле компилируемой программы ошибок нет(на 95%),
    но консоль запустилась, это очень хорошо

    возможно я компилировал неправильно
    Attachments
    снимок доски отладки
    Снимок экрана 2021-03-16 182655.png (339.48 KiB)
    снимок доски отладки Viewed 10274 times
  • Покажи, что в ".environ" (он должен быть в корне ФС, хотя его отсутствие не должно приводить к падению) и "build.sh". И какая ревизия ОС (у меня 8329)? Там никакого вывода в терминале и [User] нет?
    Я особо под Kolibri не тестировал. Просто проверил факт запускаемости "fpc.kex" из под KFar. Собираю всё под Linux через fpcmake и make.
    Завтра посмотрю.

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

    ..bw
  • во вкладке user доски отладки ничего, ядро версии 8552, если без без файла загружать fpc.kex то в доске отладки будет сообщение об отсутствии файла(не точно),ppc386.kex вроде работает
    Attachments
    Снимок экрана 2021-03-16 221848-3.png
    Снимок экрана 2021-03-16 221848-3.png (128.97 KiB)
    Viewed 10258 times
    Снимок экрана 2021-03-16 220856-1.png
    Снимок экрана 2021-03-16 220856-1.png (262.26 KiB)
    Viewed 10258 times
  • а консоль же не через console.obj написана?
  • Это не поможет с 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
  • а где в fpc для винды(линукса) находится реализация сокетов Беркли? , просто свой костыль для сети , криво переписанный с СИ,
    работает не совсем корректно.
    с консолью можно сделать как gui приложение, но в котором будет загружаться console.obj, и при {$apptype console} просто добавлять в программу модуль kos_console и вызов загрузочной функции ?
  • 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;
    не тестил
  • В основном исправления: Файл с конфигурацией "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
  • что нужно для порта FPC сделать?
  • что-то опять не работает))
    версия: Последняя(210317)
    не компилится программа
    Attachments
    code_1.pas (11.85 KiB)
    //вот эта программа
    Downloaded 220 times
    Снимок экрана 2021-04-26 034432.png
    Снимок экрана 2021-04-26 034432.png (157.57 KiB)
    Viewed 9482 times
  • Who is online

    Users browsing this forum: No registered users and 3 guests