OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Воскресенье, 24 Сентябрь, 2017 19:01

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




Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
 Заголовок сообщения: Ввод текста из консоли - Freenix
СообщениеДобавлено: Вторник, 17 Май, 2016 21:49 
Аватара пользователя

Зарегистрирован: Среда, 22 Апрель, 2015 23:51
Сообщения: 104
Откуда: г. Рига, Латвийская ССР
Отсоединено от темы «CPCC - сборка исполняемого файла». Речь идёт о сборке Блэкбокса для Линукса под названием «Freenix».

Вопрос: Как обеспечивать ввод с клавиатуры?
Задача состоит в том, чтобы скомпилировать и скомпоновать простую программу, в которую пользователь вводит строку или число, которое затем обрабатывается и выводится на консоль. В итоге, программа должна быть представлена в виде исполняемого файла для Линукса и для Виндоуса.

Вывод на консоль обеспечивается включением модуля Log и компоновкой его вместе с LinLog. В разделе BEGIN модуля LinLog вставлен вызов процедуры Open, которая подключает LinLog к Log через механизм Log.Hook.
Код:
echo "ConsCompiler.Compile('Proga/Mod', 'Test.Mod')" | ./blackboxc
echo "LinLinker.Link proga := Kernel$+ Math Files Strings Log Dialog LinLog Services Fonts Stores ProgaTest" | ./blackboxc

Первая строчка компилирует модуль ProgaTest из текстового файла "Proga/Mod/Test.Mod", вторая - компонует программу, создавая исполняемый файл "proga".

Вот файл Test.Mod:
Код:
MODULE ProgaTest;
IMPORT Log;
VAR a: INTEGER;
BEGIN
  (* Вместо этого должен быть ввод: *)
  a := 7;

  a := a * 4;
  Log.String('a * 4 ='); Log.Int(a); Log.Ln
END ProgaTest.


В файле Lin/Mod/Libc.odc есть привязка к линуксовской процедуре fgets. Надо ли её использовать?
Правильно ли будет написать какой-нибудь модуль ConsIn и в нём реализовать процедуры для чтения с клавиатуры?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ввод текста из консоли - Freenix
СообщениеДобавлено: Вторник, 17 Май, 2016 22:27 
Аватара пользователя

Зарегистрирован: Суббота, 26 Ноябрь, 2005 02:12
Сообщения: 424
Откуда: Егорьевск
Можно через DevCommanders.par или Console.ReadLn


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ввод текста из консоли - Freenix
СообщениеДобавлено: Вторник, 17 Май, 2016 23:31 
Аватара пользователя

Зарегистрирован: Среда, 22 Апрель, 2015 23:51
Сообщения: 104
Откуда: г. Рига, Латвийская ССР
Хм... Модуль Console ничего не импортирует. А вот модуль HostConsole (их вроде несколько разных) подключается к модулю Console через его процеудру SetConsole(c: Console). Как это всё скомпоновать?
Получается, модули Log и LinLog не нужны, раз в HostConsole есть WriteChar, WriteString, WriteLn?
А как быть с аналогом «Log.Int» и прочими процедурами? Нормально ли будет написать свой модуль-оболочку?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ввод текста из консоли - Freenix
СообщениеДобавлено: Среда, 18 Май, 2016 00:39 
Аватара пользователя

Зарегистрирован: Среда, 22 Апрель, 2015 23:51
Сообщения: 104
Откуда: г. Рига, Латвийская ССР
Получилось так:
Код:
echo "LinLinker.Link ProgaTest := Kernel$+ Math Files Strings Log Dialog LinLog Console HostLang HostConsole ProgaTest" | ./blackboxc

Код:
Console.WriteStr('Hello'); Console.WriteLn

Получается, чтобы выводить числа, надо писать перевод числа в строку, а потом запускать Console.WriteStr?

Обновление:
Решил писать свой модуль In. Поместил его в System/Mod/In.Mod, а старый модуль In удалил (он излишне привязан к оконной системе). То же самое сделал с модулем Out. Это нормальное решение? Если нет, как лучше поступить?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ввод текста из консоли - Freenix
СообщениеДобавлено: Среда, 18 Май, 2016 16:12 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 1875
Откуда: Красноярск
Я чувствую, что тут назрел видеоурок. Просто сложно все написать... непонятно с чего начать. Сегодня постараюсь записать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ввод текста из консоли - Freenix
СообщениеДобавлено: Среда, 18 Май, 2016 17:25 
Аватара пользователя

Зарегистрирован: Среда, 22 Апрель, 2015 23:51
Сообщения: 104
Откуда: г. Рига, Латвийская ССР
Иван Денисов писал(а):
Я чувствую, что тут назрел видеоурок. Просто сложно все написать... непонятно с чего начать. Сегодня постараюсь записать.

Было бы здорово! Заранее спасибо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ввод текста из консоли - Freenix
СообщениеДобавлено: Четверг, 19 Май, 2016 09:21 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 1875
Откуда: Красноярск
До видеоурока вчера руки не дошли, сегодня попытаюсь записать.

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

Код:
MODULE DemoObx1;

IMPORT Console;

PROCEDURE Init;
VAR name: ARRAY 256 OF CHAR;
BEGIN
   Console.WriteStr("Ваше имя?");
   Console.WriteLn;
   Console.ReadLn(name);
   Console.WriteStr("Здравствуйте, " + name);
END Init;

BEGIN
   Init

END DemoObx1.

LINUX
Q^ LinLinker.Link demo1 := Kernel$+ Files HostFiles Log Console Dialog HostLang HostConsole DemoObx1

WINDOWS
Q^ DevLinker.Link demo1.exe := Kernel$+ Files HostFiles Log Console Dialog HostConsole DemoObx1


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: LinLog / Console
СообщениеДобавлено: Четверг, 19 Май, 2016 23:01 
Аватара пользователя

Зарегистрирован: Среда, 22 Апрель, 2015 23:51
Сообщения: 104
Откуда: г. Рига, Латвийская ССР
Получается, LinLog вообще не нужен (можно просто использовать Console)?
Что лучше сделать, если я хочу заменить модули In и Out на свои (для включения компилятора в свою интегрированную среду)? Есть какой-то другой способ или их надо просто удалить и переписать?
Кстати, в модуле Console нет процедур типа ReadInt и т. п., но главное, нет ReadChar. Хотя привязка к сишному getchar(), вроде как, была, можно, наверное, дописать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ввод текста из консоли - Freenix
СообщениеДобавлено: Пятница, 20 Май, 2016 06:52 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 1875
Откуда: Красноярск
Console дает только самые базовые вещи, над ней реализован ConsLog, но он сейчас сделан неудобно для кроссразработки (зависимостей много), поэтому я использовал LinLog и WinConsole вместо этого, чтобы установить реализацию вывода в зависимости от платформы. Сейчас я думаю, что пора это безобразие прекращать, так что поработаю над доработкой. Ну и потом уже только имеет смысл это в видеоформате выкладывать.

ReadInt и т.п. вы несложно реализуете также написав надстройку над Console, где с помощью Strings будете строки конвертировать в нужные данные.

В своем сообщении выше неточность нашел, для Windows надо так собирать с ключом dos
Код:
Q^ DevLinker.Link dos demo1.exe := Kernel$+ Files HostFiles Log Console Dialog HostConsole DemoObx1


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ввод текста из консоли - Freenix
СообщениеДобавлено: Пятница, 20 Май, 2016 15:25 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 1875
Откуда: Красноярск
Вот обещанный урок:
https://youtu.be/zxx18LhOr4s

Там про ввод, правда, вскользь упомянуто только. Я специально остановился на выводе. С одной стороны так проще одну мысль донести. С другой, универсальный ввод не реализован пока так как Log. Но Console есть и для Windows и для Linux. Так что кроссплатформенность имеется.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ввод текста из консоли - Freenix
СообщениеДобавлено: Суббота, 21 Май, 2016 02:39 
Аватара пользователя

Зарегистрирован: Среда, 22 Апрель, 2015 23:51
Сообщения: 104
Откуда: г. Рига, Латвийская ССР
Иван, большое спасибо за видеоурок! Вообще, такие видеоролики лучше вводят в курс дела, чем 50 сообщений.
Другие твои ролики я как-то давно тоже все пересмотрел.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ввод текста из консоли - Freenix
СообщениеДобавлено: Понедельник, 23 Май, 2016 19:56 
Аватара пользователя

Зарегистрирован: Среда, 22 Апрель, 2015 23:51
Сообщения: 104
Откуда: г. Рига, Латвийская ССР
Предлагаю всем желающим поглазеть на FreeOberon+Freenix:
http://radioflot.com/oberon/FreeOberon_fullscreen.zip
http://radioflot.com/oberon/FreeOberon_windowed.zip
Для ввода используется модуль In, для вывода - модуль Out (это сделано для обратной совместимости с FreeOberon/OO2C).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ввод текста из консоли - Freenix
СообщениеДобавлено: Воскресенье, 05 Июнь, 2016 10:48 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 1875
Откуда: Красноярск
Я поглазел, но слабо понял как это все работает... Под вайном у меня виснет почему-то при попытках компиляции.
А под Linux вариант там не нашел запуска. Хотя как раз SDL2 то кроссплатформенный сейчас. Можно делать оба варианта.

Но прикольно, что у вас нас сайте Оберон числится в перечне используемых технологий.

Вложение:
techs.png
techs.png [ 17.78 КБ | Просмотров: 2480 ]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ввод текста из консоли - Freenix
СообщениеДобавлено: Среда, 08 Июнь, 2016 12:27 

Зарегистрирован: Суббота, 04 Март, 2006 15:13
Сообщения: 653
Откуда: СССР
kekc_leader писал(а):
Предлагаю всем желающим поглазеть на FreeOberon+Freenix:


Очень интересно. А как Вы собираетесь применять программы в стиле Turbo Vision?
Для удаленного запуска на сервере через командную строку?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ввод текста из консоли - Freenix
СообщениеДобавлено: Четверг, 22 Июнь, 2017 03:10 
Аватара пользователя

Зарегистрирован: Среда, 22 Апрель, 2015 23:51
Сообщения: 104
Откуда: г. Рига, Латвийская ССР
Kubanych писал(а):
Очень интересно. А как Вы собираетесь применять программы в стиле Turbo Vision?
Для удаленного запуска на сервере через командную строку?

Программа в стиле Turbo Vision пока одна — собственно сам Free Oberon. Применяется по прямому назначению — для обучения студентов, курсантов, школьников.
Но, кроме того, программы в стиле Turbo Vision могут быть использованы и в других сферах. Псевдографический интерфейс имеет некоторые неповторимые достоинства, в частности недвусмысленность изображаемых элементов, которая выражается в том, что если в данном месте на экране отображается символ X, то можно быть уверенным, что ничего, кроме символа X, текстового указателя и указателя мыши в этом месте на экране нет (никаких элементов «размером 1 пиксель»). Ну и программы для удалённого запуска через терминал на сервере, никуда от них не деться ещё долго.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 15 ] 

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


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

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


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

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2017, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB