В рамках проекта по разработке инструмента по вычленению области 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 и консоль авторства А. Ширяева имеют одинаковое поведение.
Я подумал, что это может быть связано с механизмом исполнения кода модулей при загрузке слинкованного файла, потому и разместил эту тему в "системных вопросах"