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

Твердыня модульных языков
Текущее время: 18 июн 2025, 00:03

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




Начать новую тему Ответить на тему  [ Сообщений: 11 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Графические возможности Oberon 2
СообщениеДобавлено: 21 май 2017, 12:07 
Не в сети

Сообщения: 116
Откуда: Каменск-Уральский
Какие модули надо подключать и как с ними работать, чтобы нарисовать линию, точку, окружность? Как определить разрешение экрана?


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Графические возможности Oberon 2
СообщениеДобавлено: 21 май 2017, 19:23 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Вопросы вывода элементарной графики, давно решённые в других средствах разработки, при работе на Обероне могут вызвать дополнительные трудности. Всё-таки Оберон — средство не "из коробки", а, скорее, конструктор. Со всеми вытекающими достоинствами и недостатками.

Прежде всего нужно уточнить, какую ОС и какую реализацию Оберона мы будем использовать. В зависимости от этого и будет ответ, потому что средства разных реализаций отличаются. Как мы знаем, многие реализации Оберона вообще самопальные и делаются энтузиастами. В них базовая работа с графикой может быть вообще не предусмотрена. И приходится либо привязываться к WinAPI, либо ещё что-то в таком духе.

Вот что я сходу нашёл для некоторых реализаций:


    BlackBox Component Builder (из коллекции компонентов на сайте Гельмута Цинна):
    • FreeImage — Loading, displaying and saving popular graphic image formats.
    • DiaPlot — allows to plot 2D graphs with unlimeted number of curves, to make animated graphs, to export graphs to "csv" and "mpl" formats.
    • Info21 — One module of Info21 provides an approximation to the Turbo Pascal graphics library.
    • Ogl — An interface to OpenGL.
    • Opal — Oberon Portable Applications Library.
    • Sdl — Simple DirectMedia Layer bindings for Oberon.
    • Xy — contains games based on XyColorPlane grafik. We offer something unique: a compromise between the mono-tasking of the original XYplane and the perfect cooperative multitasking of Blackbox. The following games are included: "IFS (Fractale)", "Life", "Lights on", "Minesweeper", "Reversi (Othello)", "Tic Tac Toe", "Vier Gewinnt (Connect Four)", "Pac Man", "Snake", "Tetris" and "Tron".

    Free Oberon — в поставке есть модуль Graph, который работает поверх SDL2


    A2/Active Oberon — примеры работы с графикой есть на сайте SAGE

Буду рад, если коллеги дополнят.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Графические возможности Oberon 2
СообщениеДобавлено: 23 май 2017, 18:11 
Не в сети

Сообщения: 116
Откуда: Каменск-Уральский
Я что-то слышал о стандартном модуле System, который должен входить во все реализации Оберона. Что это за модуль такой, каковы его функции?


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Графические возможности Oberon 2
СообщениеДобавлено: 23 май 2017, 20:57 
Не в сети
Администратор
Аватара пользователя

Сообщения: 273
Откуда: Россия
Len писал(а):
Я что-то слышал о стандартном модуле System, который должен входить во все реализации Оберона. Что это за модуль такой, каковы его функции?

Из Х.Мёссенбёк, Н.Вирт (пер.С.Свердлова )Язык программирования Оберон-2 (Приложение С):
Цитата:
Модуль SYSTEM содержит некоторые типы и процедуры, которые необходимы для реализации операций низкого уровня, специфичных для данного компьютера и/или реализации. Они включают, например, средства для доступа к устройствам, которые управляются компьютером, и средства, позволяющие обойти правила совместимости типов, наложенные определением языка. Настоятельно рекомендуется ограничить использование этих средств специфическими модулями (модулями низкого уровня). Такие модули непременно являются непереносимыми, но легко распознаются по идентификатору SYSTEM, появляющемуся в их списке импорта.
Нужно стараться не использовать SYSTEM и его процедуры - это средства "для трюков", когда обычными инструментами не обойтись. А уж если без него нельзя, то лучше создать модуль с набором своих специфических процедур (использующих SYSTEM для доступа на низком уровне), а потом в своей программе использовать не SYSTEM, а этот новый модуль.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Графические возможности Oberon 2
СообщениеДобавлено: 24 май 2017, 20:38 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Len писал(а):
Я что-то слышал о стандартном модуле System, который должен входить во все реализации Оберона. Что это за модуль такой, каковы его функции?
Псевдомодуль SYSTEM не стандартизирован и, строго говоря, даже не является частью языка Оберон. И его реализация может зависеть от транслятора и платформы. Обычно в него входят низкоуровневые операции (например, логический битовый сдвиг), функции для низкоуровневого (опасного!) доступа к памяти, иногда к регистрам. Вот какие операции реализованы, например, в Ofront:

Код: "OBERON"
  1. DEFINITION SYSTEM;
  2.  
  3. TYPE
  4. BYTE = Octet; (* Тип октет - байт, содержащий 8 бит *)
  5. PTR = POINTER TO Any; (* Безтиповый указатель со сборкой мусора, аналог ANYPTR *)
  6.  
  7. PROCEDURE ADR (x: Any): LONGINT; (* Возвращает адрес переменной, процедуры, массива или записи *)
  8. PROCEDURE BIT (adr, n: LONGINT): BOOLEAN; (* Установлен ли бит n по адресу adr? *)
  9. PROCEDURE GET (adr: LONGINT; VAR x: Scalar); (* Читать из памяти *)
  10. PROCEDURE LSH (i: Int; n: LONGINT): Int; (* Логический сдвиг битов *)
  11. PROCEDURE MOVE (sadr, dadr, n: LONGINT); (* Копировать участок памяти sadr в dadr длиной n *)
  12. PROCEDURE NEW (VAR p: PTR; n: LONGINT); (* Зарезервировать указанное количество памяти *)
  13. PROCEDURE PUT (adr: LONGINT; x: Scalar); (* Записать в память *)
  14. PROCEDURE ROT (i: Int; n: LONGINT): Int; (* Циклический сдвиг битов *)
  15. PROCEDURE VAL (T: Type; x: Any): T; (* Интерпретировать x как значение типа T *)
  16.  
  17. END SYSTEM.


The Module SYSTEM in ETH Oberon


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Графические возможности Oberon 2
СообщениеДобавлено: 25 май 2017, 13:31 
Не в сети

Сообщения: 116
Откуда: Каменск-Уральский
Oberon 07 compiler не поддерживает функцию LEN(a, b) для многомерных массивов :( .


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Графические возможности Oberon 2
СообщениеДобавлено: 25 май 2017, 19:48 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Гм, и действительно.


Вложения:
LEN.png
LEN.png [ 99.3 КБ | Просмотров: 24015 ]
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Графические возможности Oberon 2
СообщениеДобавлено: 25 май 2017, 19:58 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Отчёт о языке описывает только один аргумент для LEN(), при том, что многомерные массивы Оберон-07 поддерживает. Получается, что вычислить длину многомерного открытого массива некак. Да здравствует простота! ;-)

Len, я вот не любитель Оберона-07. Могу только посоветовать не использовать этот диалект.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Графические возможности Oberon 2
СообщениеДобавлено: 25 май 2017, 21:29 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Артур Ефимов писал(а):
Но можно же сделать так: LEN(m[0])

потому что ARRAY 4, 6 OF INTEGER - это всего лишь сокращение от ARRAY 4 OF ARRAY 6 OF INTEGER

поэтому m[0] в таком случае - это ARRAY 6 OF INTEGER, поэтому его вполне можно использовать в качестве параметра в LEN


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Графические возможности Oberon 2
СообщениеДобавлено: 26 май 2017, 15:41 
Не в сети

Сообщения: 108
Zorko писал(а):
Отчёт о языке описывает только один аргумент для LEN(), при том, что многомерные массивы Оберон-07 поддерживает. Получается, что вычислить длину многомерного открытого массива некак. Да здравствует простота! ;-)


В O7 нет динамических массивов, поэтому длина многомерного открытого массива всегда может быть вычислена как LEN(open_array) * константую длину элемента.

Zorko писал(а):
Len, я вот не любитель Оберона-07. Могу только посоветовать не использовать этот диалект.


А если использовать, то в виде oberonJS :)


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

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


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

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


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

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