Оберон-клуб «ВЄДАsoft»

Твердыня модульных языков
Текущее время: 28 мар 2024, 21:29

Часовой пояс: UTC + 2 часа




Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу 1, 2, 3  След.
Автор Сообщение
СообщениеДобавлено: 01 дек 2019, 00:12 
Не в сети

Сообщения: 53
Есть программное обеспечение http://sage.com.ua/ru.shtml?e6l0 для языка программирования Дракон, которое позволяет из блок-схемы получить Active Oberon. Как из него сделать портабельную программу, запускаемую кликом мыши?

_________________
Работаю в Windows 10. В то же время также установлен Линукс для некоторых ситуаций


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 02 дек 2019, 21:22 
Не в сети

Сообщения: 76
Имеется в виду получение исполняемого .exe файла?
Точно так же как и просто на Active Oberon. ДРАКОН в приведённой Вами ссылке лишь надстройка над Active Oberon.
Всё что можно написать на Active Oberon можно изобразить и на ДРАКОНе.

Вы консольное приложение хотите сделать или GUI-приложение?


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 02 дек 2019, 22:01 
Не в сети

Сообщения: 53
Благодарю за информацию. Для начала консольное с целью обучения. Пока что в Оберон надо освоить самые основы. Уже понял по каким учебным материалам это можно сделать.

_________________
Работаю в Windows 10. В то же время также установлен Линукс для некоторых ситуаций


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 03 дек 2019, 02:22 
Не в сети

Сообщения: 76
В принципе, для системы A2 есть вариант сборки её главного приложения с включением консольной оболочки. На основе этого приложения уже можно сделать любое консольное приложение, более того, весьма гибкое приложение, так как у традиционных статически собранных консольных приложений одна-единственная "точка входа", а здесь можно сделать одно консольное приложение со множеством "точек входа" и потом легко за эти точки входа дёргать в процессе работы :) Это всё за счёт динамической модульности унаследованной ОС А2 от ОС ETH Oberon.
Вот, например, я взял стандартный (с включенной консольной оболочкой) главный запускаемый модуль Unix A2 x64, добавил один-единственный модуль, скомпилировал его под Linux 64.
Дальше я написал простейший командный файл для исполнения в консольной оболочке A2 и получил в результате готовый CGI скрипт, который можно скопировать на сервер и он работает :)
Код: "OBERON"
  1. MODULE env; (** AUTHOR "Yaroslav Romanchenko"; PURPOSE "Simple example of reading environment variables on Unix"; *)
  2.  
  3. IMPORT
  4. SYSTEM, Commands, Unix;
  5.  
  6. PROCEDURE GetEnvVar(aName: ARRAY OF CHAR; VAR aVar: ARRAY OF CHAR): BOOLEAN;
  7. VAR
  8. addr: ADDRESS;
  9. i, max: LONGINT;
  10. c: CHAR;
  11. bOk: BOOLEAN;
  12. BEGIN
  13. bOk := FALSE;
  14. max := LEN(aVar) - 1;
  15. (* For reading even one char we need at least array of length 2 *)
  16. IF max >= 1 THEN
  17. addr := Unix.getenv(ADDRESSOF(aName));
  18. IF addr = 0 THEN
  19. (* There is no such variable. Result is FALSE *)
  20. aVar[0] := 0X
  21. ELSE
  22. REPEAT
  23. SYSTEM.GET(addr, c);
  24. aVar[i] := c;
  25. INC(addr);
  26. INC(i)
  27. UNTIL (c = 0X) OR (i = max);
  28. aVar[i] := 0X;
  29. bOk := TRUE
  30. END
  31. END;
  32. RETURN bOk
  33. END GetEnvVar;
  34.  
  35. PROCEDURE var*(context: Commands.Context);
  36. VAR
  37. aName, aVar: ARRAY 256 OF CHAR;
  38. BEGIN
  39. context.arg.SkipWhitespace();
  40. context.arg.Token(aName);
  41. IF (aName[0] # 0X) & GetEnvVar(aName, aVar) THEN
  42. context.out.String(aName);
  43. context.out.Char('=');
  44. context.out.String(aVar);
  45. context.out.Ln
  46. END;
  47. END var;
  48.  
  49. END env.
  50.  
Скрипт для Linux, а модуль я компилировал, из-под Win A2 x64. Кросс-компиляция в действии! 8-) Поскольку в такой ситуации в системе просто нет необходимых объектных модулей для Linux, процесс компиляции таков:
1. Окидываем взором наш модуль, который нам надо скомпилировать, видим, что: а) SYSTEM - модуль встроенный в компилятор, независимый от платформы; б) Commands - скорее-всего зависим от платформы, список зависимостей нам понадобится; в) Unix - зависимость понятна :)
2. Получаем список зависимостей для модулей, для которых нам надо его получить.
Для этого выполняем такую команду, первый параметр - платформа, второй - модуль, для которого строим список зависимостей:
Цитата:
Release.RequiredModules Linux64 Commands ~
Получаем такой список:
Цитата:
AMD64.Builtins.Mod Trace.Mod Linux.Glue.Mod Linux.Unix.Mod Unix.Machine.Mod
Heaps.Mod Modules.Mod Unix.Objects.Mod KernelLog.Mod RealConversions.Mod
Streams.Mod
3. Повторяем п. 2 пока не получим полный список всех зависимостей.
4. Составляем команду компиляции нашего модуля под заданную платформу, перечислив все модули, которые надо скомпилировать:
Цитата:
Compiler.Compile -p=Unix64
AMD64.Builtins.Mod Trace.Mod Linux.Glue.Mod Linux.Unix.Mod Unix.Machine.Mod
Heaps.Mod Modules.Mod Unix.Objects.Mod KernelLog.Mod RealConversions.Mod
Streams.Mod
Commands.Mod
env.Mod
~
Команды для исполнения в оболочке написал такие (как видите, тут используется стандартный Unix-овый приём Шебанг, для указания, чем данный скрипт надо исполнить):
Цитата:
#!./oberon run
System.Show Content-type: text/html~
System.Ln ~
System.Ln ~
System.Show <HTML> ~
System.Ln ~
System.Show <HEAD><TITLE>Hello from A2 OS</TITLE></HEAD> ~
System.Ln ~
System.Show <BODY> ~
System.Ln ~
System.Show <H1>Hello from A2 OS!</H1> ~
System.Ln ~
System.Show <H2>Version information:</H2> ~
System.Version ~
System.Ln ~
System.Show <H2>Some environment variables:</H2> ~
System.Ln ~
env.var HTTP_HOST ~
System.Show <BR> ~
System.Ln ~
env.var HTTP_USER_AGENT ~
System.Show <BR> ~
System.Ln ~
env.var REQUEST_URI ~
System.Show <BR> ~
System.Ln ~
env.var REQUEST_METHOD ~
System.Show <BR> ~
System.Ln ~
env.var SERVER_NAME ~
System.Show <BR> ~
System.Ln ~
env.var SERVER_SOFTWARE ~
System.Show <BR> ~
System.Ln ~
env.var SERVER_SIGNATURE ~
System.Show <BR> ~
System.Ln ~
env.var UNIQUE_ID ~
System.Show <BR> ~
System.Ln ~
System.Show <H2>Loaded modules:</H2> ~
System.ListModules ~
System.Ln ~
System.Show <H2>To be continued... Stay tuned!</H2> ~
System.Show </BODY></HTML> ~
System.Ln ~
System.PowerDown ~
И как видите, в каждой строчке вызывается какая-то команда какого-либо модуля (т.е. мы вызываем разные точки входа одного приложения).
Результат работы данных команд Hello from A2 OS!
При желании можно проанализировать все зависимости и пересобрать данное приложение, оставив только те модули, которые реально нужны. Такую пересборку, естественно, тоже можно выполнить из-под A2.
А можно оставить главный модуль и как есть, лишь добавляя функционал, дописывая новые модули.
Я высказал идею, что можно вообще сделать целый пакет полезных и удобных консольных утилит на все случаи жизни в "A2 в качестве командного интерпретатора" и по-немногу дописываю всякие утилиты.


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 03 дек 2019, 02:26 
Не в сети

Сообщения: 76
Все файлы полученного CGI приложения


Вложения:
env.zip [239 КБ]
Скачиваний: 347
Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 03 дек 2019, 07:25 
Не в сети

Сообщения: 53
Благодарю за информацию. А у Вас ник совпадает с именем части сайта по ссылке из первого поста. Это именно Вы разработали, что там размещено?

_________________
Работаю в Windows 10. В то же время также установлен Линукс для некоторых ситуаций


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 03 дек 2019, 09:03 
Не в сети

Сообщения: 76
Pimbom писал(а):
Благодарю за информацию. А у Вас ник совпадает с именем части сайта по ссылке из первого поста. Это именно Вы разработали, что там размещено?
Да, это мой сайт. Буду рад ответить на любые вопросы, касающиеся содержимого сайта, и не только ;)


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 03 дек 2019, 19:36 
Не в сети

Сообщения: 53
А во Free Oberon https://zx.freeoberon.su/forum/viewforum.php?f=116 получаемый Active Oberon можно превращать в exe или имеется некоторая несовместимость?

_________________
Работаю в Windows 10. В то же время также установлен Линукс для некоторых ситуаций


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 03 дек 2019, 20:01 
Не в сети

Сообщения: 76
Pimbom писал(а):
А во Free Oberon https://zx.freeoberon.su/forum/viewforum.php?f=116 получаемый Active Oberon можно превращать в exe или имеется некоторая несовместимость?
Даже если использовать лишь базовые конструкции диалектов Оберона, увы, как минимум именование библиотек и их интерфейсов не совпадёт. А если использовать все возможности Active Oberon (активности, математические расширения, перегрузку операторов и т.д.), то и подавно.
Для обеспечения лучшей совместимости надо добавлять соответствующие фронт-энды к компиляторам, стандартизовать библиотеки и т.д. или добавлять Си бэк-энд в компилятор Fox (компилятор языка Active Oberon) ;)


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 03 дек 2019, 22:18 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Pimbom писал(а):
А во Free Oberon https://zx.freeoberon.su/forum/viewforum.php?f=116 получаемый Active Oberon можно превращать в exe или имеется некоторая несовместимость?
Когда Free Oberon перейдёт на Ofront+, в нём будет доступно пять Оберон-диалектов:

    Oberon-3 (наш экспериментальный диалект)

Не исключаю появления поддержки OberonX и Active Oberon. По мере востребованности.


Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 2 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
© VEDAsoft Oberon Club