OberonCore
https://forum.oberoncore.ru/

Открытие ссылок и документов
https://forum.oberoncore.ru/viewtopic.php?f=34&t=6090
Страница 1 из 1

Автор:  Иван Денисов [ Понедельник, 31 Июль, 2017 15:21 ]
Заголовок сообщения:  Открытие ссылок и документов

Для открытия ссылок из Linux версии сделал вот такую процедуру.

Код:
   PROCEDURE (h: ExtCallHook) OpenExternal* (IN fileName: ARRAY OF CHAR);
   VAR  i, process: INTEGER; cmd: ARRAY [untagged] 128 OF SHORTCHAR;
   BEGIN
      FOR i  := 0 TO LEN(cmd) - 1 DO cmd[i] := 0X END;
      cmd := "xdg-open " + SHORT(fileName$);
      process := LinLibc.popen(cmd, "r");
   END OpenExternal;


Ссылки открываются.

Однако каждый раз при открытии возникает TRAP.
Вложение:
trap.png
trap.png [ 12.29 КБ | Просмотров: 26125 ]


Не подскажете, в чем может быть дело? Что предложите попробовать для эксперимента еще?

Автор:  Илья Ермаков [ Понедельник, 31 Июль, 2017 16:15 ]
Заголовок сообщения:  Re: Открытие ссылок и документов

Ошибочная сигнатура popen?

Автор:  Иван Денисов [ Понедельник, 31 Июль, 2017 16:40 ]
Заголовок сообщения:  Re: Открытие ссылок и документов

Илья Ермаков писал(а):
Ошибочная сигнатура popen?


Вот так тут приводится http://man7.org/linux/man-pages/man3/popen.3.html
Код:
FILE *popen(const char *command, const char *type);


А вот объявление:
Код:
MODULE LinLibc ["libc.so.6"];

TYPE
   PtrFILE* = INTEGER;
   PtrSTR* = POINTER TO ARRAY [untagged] OF SHORTCHAR;

...

   PROCEDURE [ccall] popen* (cmd, mode: PtrSTR): INTEGER;

END LinLibc.

Автор:  Илья Ермаков [ Понедельник, 31 Июль, 2017 16:53 ]
Заголовок сообщения:  Re: Открытие ссылок и документов

Странно... Какая-то чудня с новым выравниванием в GCC, не?

Автор:  prospero78 [ Понедельник, 31 Июль, 2017 23:37 ]
Заголовок сообщения:  Re: Открытие ссылок и документов

Кхм-кхм....

Герметизаацияяяя!.... :lol:

З.Ы. GCC мне откровенно не нравится. Жирный, непонятный, всего в нём понаворочено, концы с концами не сходятся.
LLVM потому и начат был, что над GCC контроль утерян и уже не вернётся, имхо.

Автор:  Иван Денисов [ Вторник, 01 Август, 2017 07:37 ]
Заголовок сообщения:  Re: Открытие ссылок и документов

prospero78 писал(а):
Герметизаацияяяя!....
Какая у тебя идея? Я не понимаю.

Автор:  Kemet [ Вторник, 01 Август, 2017 08:28 ]
Заголовок сообщения:  Re: Открытие ссылок и документов

а можно у вас как-то errno посмотреть?

Автор:  Иван Денисов [ Вторник, 01 Август, 2017 08:37 ]
Заголовок сообщения:  Re: Открытие ссылок и документов

Kemet писал(а):
а можно у вас как-то errno посмотреть?

Попробую раздобыть.

Илья Ермаков писал(а):
Странно... Какая-то чудня с новым выравниванием в GCC, не?

Попробую сделать обертку и применить стандартное исправление для такого случая.

Автор:  Дмитрий Дагаев [ Вторник, 01 Август, 2017 09:13 ]
Заголовок сообщения:  Re: Открытие ссылок и документов

Сталкивался с этой проблемой, трап возникал позже, на Sleep. Не решил, деталей уже не помню, оставил комментарий в коде.
Код:
      (* something wrong with popen on BlackBox, it traps later on Ta_Basics.Sleep *)
      pr.f := Tl.popen(str, "r");
      IF pr.f = 0 THEN
         res := -1
      ELSE
         pr.fd := Tl.fileno(pr.f);
         IF Tl.fcntl(pr.fd, Tl.F_SETFL, Tl.O_NONBLOCK) < 0 THEN
            res := -1
         ELSE
            res := 0
         END
      END

Автор:  Иван Денисов [ Вторник, 01 Август, 2017 11:08 ]
Заголовок сообщения:  Re: Открытие ссылок и документов

Kemet писал(а):
а можно у вас как-то errno посмотреть?



Код:
   VAR   
      process: INTEGER;
      cmd, type: LinLibc.PtrSTR;
      sp: INTEGER;

   PROCEDURE POpen (a, t: ARRAY [untagged] 128 OF SHORTCHAR): INTEGER;
   BEGIN   
      SYSTEM.GETREG(4, sp);
      SYSTEM.PUTREG(4, sp DIV 16 * 16 - X);
      cmd := SYSTEM.VAL(LinLibc.PtrSTR, SYSTEM.ADR(a[0]));
      type := SYSTEM.VAL(LinLibc.PtrSTR, SYSTEM.ADR(t[0]));
      RETURN LinLibc.popen(cmd, type);
   END POpen;
   
   PROCEDURE (h: ExtCallHook) OpenExternal* (IN fileName: ARRAY OF CHAR);
   VAR  res: INTEGER;
   BEGIN
      process := POpen("xdg-open " + SHORT(fileName$) + " &", "r");
      res := LinLibc.pclose(process);
   END OpenExternal;
   
   (*   get error num from linux   *)
   PROCEDURE Errno*;
      VAR
         addr, errno: INTEGER;
   BEGIN
      addr := LinLibc.__errno_location();
      SYSTEM.GET(addr, errno);
      Log.Int(process); Log.Int(errno); Log.Ln;
   END Errno;


Для отладки вызываю процедуру Errno до открытия ссылки и после:

До открытия: 0 11
После: 163161008 11
Дескриптор файла значит создается корректно. 11 - какая-то ошибка, которая там висит сразу после запуска ББ
Код:
EAGAIN* = 11;   (* Try again *)


Изменения параметра X в процедуре POpen на 4, 8, 12, 16 не приводят к успеху. Обычно при проблемах выравнивания этот прием помогает.

Автор:  Иван Денисов [ Вторник, 01 Август, 2017 11:15 ]
Заголовок сообщения:  Re: Открытие ссылок и документов

А кто-нибудь знает, что значит TRAP 17 ? Была бы хоть какая-то подсказка...

Автор:  Kemet [ Вторник, 01 Август, 2017 11:28 ]
Заголовок сообщения:  Re: Открытие ссылок и документов

Иван, а Ос 64-битная?
И ещё, Иван, я уже заблудился в этих линуксовых ветках. Есть где-то обычный репозиторий без deb-пакетов, но готовый к запуску ибо у меня категорически OpenSuse

Автор:  Иван Денисов [ Вторник, 01 Август, 2017 11:37 ]
Заголовок сообщения:  Re: Открытие ссылок и документов

Kemet писал(а):
Иван, а Ос 64-битная?
Да, ОС 64 битная Ubuntu 17.04 GNOME.
UPD: проверил на Ubuntu 16.04.2 32-бита. Тот же TRAP 17.

Kemet писал(а):
И ещё, Иван, я уже заблудился в этих линуксовых ветках. Есть где-то обычный репозиторий без deb-пакетов, но готовый к запуску ибо у меня категорически OpenSuse

Без пакетов либо соберите из исходников (там внизу ссылка)
https://blackbox.obertone.ru/download
либо вот тоже там есть ссылка на собранную систему, но с зависимостями надо будет самому разобраться
https://blackbox.obertone.ru/unstable/m ... .20.tar.gz

Для систем, основанных на Debian, зависимости такие:
Код:
32-bit version:

   sudo apt-get install libgtk2.0-0 gtk2-engines gtk2-engines-murrine libcanberra-gtk-module
   sudo apt-get install libgnomeui-0 gnome-icon-theme-full

64-bit version:

   sudo dpkg --add-architecture i386
   sudo apt-get update
   sudo apt-get install libgtk2.0-0:i386 gtk2-engines:i386 gtk2-engines-murrine:i386 libcanberra-gtk-module:i386
   sudo apt-get install libgnomeui-0:i386 gnome-icon-theme-full


Для GNOME:
Код:
libc6:i386, libgtk2.0-0:i386, libgnomeui-0:i386, gtk2-engines:i386, gtk2-engines-murrine:i386, libcanberra-gtk-module:i386, gtk2-engines-pixbuf:i386, gnome-themes-standard:i386

Автор:  Илья Ермаков [ Вторник, 01 Август, 2017 17:29 ]
Заголовок сообщения:  Re: Открытие ссылок и документов

Иван Денисов писал(а):
А кто-нибудь знает, что значит TRAP 17 ? Была бы хоть какая-то подсказка...


Если кидается системное исключение, то код трэпа может вылезти самый разный...

Автор:  Иван Денисов [ Пятница, 04 Август, 2017 08:34 ]
Заголовок сообщения:  Re: Открытие ссылок и документов

Может быть дело вот в том недочете вызова ccall, который нашел luowy ?
https://forum.blackboxframework.org/vie ... 654&p=6256

Автор:  Илья Ермаков [ Пятница, 04 Август, 2017 21:22 ]
Заголовок сообщения:  Re: Открытие ссылок и документов

Ну тогда надо DevDecoder-ом колупнуть место вызова процедуры...

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/