OberonCore
https://forum.oberoncore.ru/

Про консольный вывод
https://forum.oberoncore.ru/viewtopic.php?f=2&t=4442
Страница 1 из 1

Автор:  Пётр Кушнир [ Суббота, 17 Август, 2013 10:59 ]
Заголовок сообщения:  Про консольный вывод

В рамках проекта по разработке инструмента по вычленению области plain-text предпросмотра из .odc-файла решил использовать ББ со стандартными компонентами Files и Stores для разработки консольного инструмента, чтобы не писать байтовое рубилово вручную на каком-нибудь Go. Принцип работы прост - в параметрах командной строки передаём утилите файл, а утилита в стандартный вывод пишет содержимое, это содержимое потом можно направить в файл или ещё куда.
Сначала возникла проблема с консолью, открывающейся в новом окне. Её я решил, заменив AllocConsole на AttachConsole.
И тут возникла другая проблема с консолью. Если какая-нибудь утилита, типа ping выводит в консоль информацию сразу после строки запуска, например вот так:
Код:
D:\dev\bbcb>ping

Использование:
    ping [-t] [-a] [-n <число>] [-l <размер>] [-f] [-i <TTL>] [-v <TOS>]
         [-r <число>] [-s <число>] [[-j <список узлов>] | [-k <список узлов>]]
         [-w <тайм-аут>] [-R] [-S <адрес источника>] [-4] [-6] конечный_узел

то вывод ББ представляет собой что-то странное:
Код:
D:\dev\bbcb>odcextract.exe

D:\dev\bbcb>Hello, world!
ping

Использование:
    ping [-t] [-a] [-n <число>] [-l <размер>] [-f] [-i <TTL>] [-v <TOS>]
         [-r <число>] [-s <число>] [[-j <список узлов>] | [-k <список узлов>]]
         [-w <тайм-аут>] [-R] [-S <адрес источника>] [-4] [-6] конечный_узел
odcextract это утилита собранная через команду
Код:
DevLinker.LinkExe
odcextract.exe := Kernel+ Files YWinFiles
Meta Log Dialog Math Strings YSystemConsole YWinConsole
YWinPreviewExt~

В модуле YSystemConsole реализуются в YWinConsole и там же реализуются абстракции Log.

Как видно, проблема в том, что вывод строки из ББ производится в какой-то неожиданный момент, когда в консоли уже появляется приглашение для ввода следующей команды.
При этом перенаправление вывода в файл не работает. Консоль из Rocot и консоль авторства А. Ширяева имеют одинаковое поведение.
Я подумал, что это может быть связано с механизмом исполнения кода модулей при загрузке слинкованного файла, потому и разместил эту тему в "системных вопросах"

Вложения:
Console.odc [7.9 КБ]
Скачиваний: 779

Автор:  Пётр Кушнир [ Суббота, 17 Август, 2013 11:02 ]
Заголовок сообщения:  Re: Про консольный вывод

В приложенном модуле вывод в консоль реализуется через WriteConsole, но в оригинальном модуле вывод был организован через WriteFile, но это ничего не изменило, символы по-прежнему появляются в странном месте.

Автор:  Пётр Кушнир [ Суббота, 17 Август, 2013 11:18 ]
Заголовок сообщения:  Re: Про консольный вывод

Развитие событий.

Если отключить AttachConsole/AllocConsole, то получается перенаправить консольный вывод в файл, но в самой консоли он не отображается. В общем, вопрос с консолью остаётся открытым, вопрос про перенаправление вывода снимается.

Автор:  Евгений Темиргалеев [ Суббота, 17 Август, 2013 14:10 ]
Заголовок сообщения:  Re: Про консольный вывод

viewtopic.php?f=47&t=2626

Автор:  Пётр Кушнир [ Суббота, 17 Август, 2013 15:17 ]
Заголовок сообщения:  Re: Про консольный вывод

Плохо я искал.

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