OberonCore
https://forum.oberoncore.ru/

Oml - МультиОберон для LLVM
https://forum.oberoncore.ru/viewtopic.php?f=157&t=6426
Страница 3 из 3

Автор:  TheAthlete [ Воскресенье, 23 Октябрь, 2022 14:27 ]
Заголовок сообщения:  Re: Oml - МультиОберон для LLVM

Можете подсказать, есть ли возможность вызова внешник команд, например вызов curl с заданным урлом. Например, чтобы создать массив урлов и в цикле скачать с помощью curl файлы по этим URL.

Автор:  Иван Денисов [ Воскресенье, 23 Октябрь, 2022 19:30 ]
Заголовок сообщения:  Re: Oml - МультиОберон для LLVM

Тут есть возможность делать привязки к внешним библиотекам, вот к примеру для Iconv, однако лучше бы вам Дмитрий Викторович тут сам подсказал, так как для Блэкбокса я привязки делал неоднократно, в вот для мультиоберона тут очевидно немного отличается принцип. Как минимум в заголовке отсутствует название библиотеки. В Блэкбоксе обычно после названия модуля идёт название библиотеки, а тут нету.

Код:
MODULE HostLinIconv;

   IMPORT SYSTEM, Libc := HostLinLibc;

   TYPE
      PtrVoid = Libc.PtrVoid;
      PtrSTR* = Libc.PtrSTR;
      PtrLSTR* = POINTER TO ARRAY [untagged] OF CHAR;
      size_t* = Libc.size_t;

      iconv_t* = PtrVoid;

   PROCEDURE [code] iconv_open* (tocode, fromcode: PtrSTR): iconv_t
      'iconv_open(tocode, fromcode)';
   PROCEDURE [code] iconv_close* (cd: iconv_t): INTEGER
      'iconv_close(cd)';

   PROCEDURE [code] iconv* (cd: iconv_t; VAR [nil] inbuf: PtrSTR; VAR inbytesleft: size_t; VAR [nil] outbuf: PtrSTR; VAR outbytesleft: size_t): size_t
      'iconv(cd, inbuf, inbytesleft, outbuf, outbytesleft)';

   PROCEDURE [code] iconv_encode* (cd: iconv_t; VAR [nil] inbuf: PtrLSTR; VAR inbytesleft: size_t; VAR [nil] outbuf: PtrSTR; VAR outbytesleft: size_t): size_t
      'iconv(cd, inbuf, inbytesleft, outbuf, outbytesleft)';

   PROCEDURE [code] iconv_decode* (cd: iconv_t; VAR [nil] inbuf: PtrSTR; VAR inbytesleft: size_t; VAR [nil] outbuf: PtrLSTR; VAR outbytesleft: size_t): size_t
      'iconv(cd, inbuf, inbytesleft, outbuf, outbytesleft)';

END HostLinIconv.


В Блэкбоксе, к слову, вызов внешних команд происходит через `Dialog.RunExternal`, однако получить результат выполнения нельзя в настоящий момент, но данные скачаются, как вы хотите.

Автор:  Дмитрий Дагаев [ Понедельник, 24 Октябрь, 2022 09:44 ]
Заголовок сообщения:  Re: Oml - МультиОберон для LLVM

Все правильно Иван пишет про механизм привязки. Можно так сделать, вытащив функцию system.
Реализацию более продвинутой версии с popen/pclose с печатью содержимого можно посмотреть в Runner.Execute. Для unix32/LLVM смотрите Runner__lue17, Api__lue.

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