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 [ 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/ |