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 [ 12.29 КБ | Просмотров: 26147 ] Не подскажете, в чем может быть дело? Что предложите попробовать для эксперимента еще? |
Автор: | Илья Ермаков [ Понедельник, 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: Открытие ссылок и документов |
Кхм-кхм.... Герметизаацияяяя!.... З.Ы. 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/ |