OberonCore
https://forum.oberoncore.ru/

Ввод текста из консоли - Freenix
https://forum.oberoncore.ru/viewtopic.php?f=133&t=5709
Страница 1 из 1

Автор:  kekc_leader [ Вторник, 17 Май, 2016 21:49 ]
Заголовок сообщения:  Ввод текста из консоли - Freenix

Отсоединено от темы «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 и в нём реализовать процедуры для чтения с клавиатуры?

Автор:  Alexander Shiryaev [ Вторник, 17 Май, 2016 22:27 ]
Заголовок сообщения:  Re: Ввод текста из консоли - Freenix

Можно через DevCommanders.par или Console.ReadLn

Автор:  kekc_leader [ Вторник, 17 Май, 2016 23:31 ]
Заголовок сообщения:  Re: Ввод текста из консоли - Freenix

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

Автор:  kekc_leader [ Среда, 18 Май, 2016 00:39 ]
Заголовок сообщения:  Re: Ввод текста из консоли - Freenix

Получилось так:
Код:
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. Это нормальное решение? Если нет, как лучше поступить?

Автор:  Иван Денисов [ Среда, 18 Май, 2016 16:12 ]
Заголовок сообщения:  Re: Ввод текста из консоли - Freenix

Я чувствую, что тут назрел видеоурок. Просто сложно все написать... непонятно с чего начать. Сегодня постараюсь записать.

Автор:  kekc_leader [ Среда, 18 Май, 2016 17:25 ]
Заголовок сообщения:  Re: Ввод текста из консоли - Freenix

Иван Денисов писал(а):
Я чувствую, что тут назрел видеоурок. Просто сложно все написать... непонятно с чего начать. Сегодня постараюсь записать.

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

Автор:  Иван Денисов [ Четверг, 19 Май, 2016 09:21 ]
Заголовок сообщения:  Re: Ввод текста из консоли - Freenix

До видеоурока вчера руки не дошли, сегодня попытаюсь записать.

Пока вот пример универсального модуля для 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

Автор:  kekc_leader [ Четверг, 19 Май, 2016 23:01 ]
Заголовок сообщения:  LinLog / Console

Получается, LinLog вообще не нужен (можно просто использовать Console)?
Что лучше сделать, если я хочу заменить модули In и Out на свои (для включения компилятора в свою интегрированную среду)? Есть какой-то другой способ или их надо просто удалить и переписать?
Кстати, в модуле Console нет процедур типа ReadInt и т. п., но главное, нет ReadChar. Хотя привязка к сишному getchar(), вроде как, была, можно, наверное, дописать.

Автор:  Иван Денисов [ Пятница, 20 Май, 2016 06:52 ]
Заголовок сообщения:  Re: Ввод текста из консоли - Freenix

Console дает только самые базовые вещи, над ней реализован ConsLog, но он сейчас сделан неудобно для кроссразработки (зависимостей много), поэтому я использовал LinLog и WinConsole вместо этого, чтобы установить реализацию вывода в зависимости от платформы. Сейчас я думаю, что пора это безобразие прекращать, так что поработаю над доработкой. Ну и потом уже только имеет смысл это в видеоформате выкладывать.

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

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

Автор:  Иван Денисов [ Пятница, 20 Май, 2016 15:25 ]
Заголовок сообщения:  Re: Ввод текста из консоли - Freenix

Вот обещанный урок:
https://youtu.be/zxx18LhOr4s

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

Автор:  kekc_leader [ Суббота, 21 Май, 2016 02:39 ]
Заголовок сообщения:  Re: Ввод текста из консоли - Freenix

Иван, большое спасибо за видеоурок! Вообще, такие видеоролики лучше вводят в курс дела, чем 50 сообщений.
Другие твои ролики я как-то давно тоже все пересмотрел.

Автор:  kekc_leader [ Понедельник, 23 Май, 2016 19:56 ]
Заголовок сообщения:  Re: Ввод текста из консоли - Freenix

Предлагаю всем желающим поглазеть на FreeOberon+Freenix:
http://radioflot.com/oberon/FreeOberon_fullscreen.zip
http://radioflot.com/oberon/FreeOberon_windowed.zip
Для ввода используется модуль In, для вывода - модуль Out (это сделано для обратной совместимости с FreeOberon/OO2C).

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

Я поглазел, но слабо понял как это все работает... Под вайном у меня виснет почему-то при попытках компиляции.
А под Linux вариант там не нашел запуска. Хотя как раз SDL2 то кроссплатформенный сейчас. Можно делать оба варианта.

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

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

Автор:  Kubanych [ Среда, 08 Июнь, 2016 12:27 ]
Заголовок сообщения:  Re: Ввод текста из консоли - Freenix

kekc_leader писал(а):
Предлагаю всем желающим поглазеть на FreeOberon+Freenix:


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

Автор:  kekc_leader [ Четверг, 22 Июнь, 2017 03:10 ]
Заголовок сообщения:  Re: Ввод текста из консоли - Freenix

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

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

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