2015-03-07 4 views
0

Наше приложение может генерировать несколько довольно длинных файлов отчетов в интерактивном режиме. Мы используем C++ для генерации всего вывода, но перенаправляем через консоль TCL и TCL-канал, чтобы мы могли использовать выходную запись и т. Д.способ поддержки вывода подкачки в приложении C++

Есть ли общий способ поддержки подкачки вывода на C++. Я бросил вокруг, но ничего не могу найти.

Лучших

Sam

+1

Используйте ваши существующие пейджинговые системы. http://en.wikipedia.org/wiki/Less_%28Unix%29 –

+0

Если на Linux вас может заинтересовать [ncurses] (https://www.gnu.org/software/ncurses/ncurses.html), но я не уверен, чего вы действительно хотите. –

+0

Подробнее .... @ DonalFellows 1. Мы генерируем вывод из C++ путем записи в Tcl_Channel - чтобы мы могли объединить вывод C++ с чем-либо, сгенерированным TCL для консольного и выходного протоколирования. Пейджинг ограничивается одной «командой», выполняемой пользователем. 2. C++ или TCL не имеет значения для меня. Просто нужно работать. 3. наше приложение полностью основано на Linux. 4. На системных пейджерах, таких как «больше» и «меньше» - у меня нет хорошей идеи, как это сделать в среде C++/Tcl, где вывод генерируется в основном из C++, но печатается на консоль через Tcl_Channel. sam –

ответ

0

КИ, так что ситуация такова, что вы пишете в Tcl_Channel, что интерпретатор Tcl также пишет. Это должно сработать. Самый простой способ поставить пейджинг поверх этого состоит в том, чтобы сделать этот канал одним из стандартных каналов (я бы выбрал stdout) и прокормить весь участок через программу пейджера, например more или less. Для работы вам потребуется всего несколько секунд.

В противном случае это возможно, чтобы написать канал в Tcl 8.5, используя только код Tcl; вот что такое reflected channel (это документация Tcl 8.6, но она работает так же, как и в 8.5). Однако использовать эту функцию для пейджера будет довольно много. каналы работают с байтами, а не с символами. Вероятно, это также возможно сделать с использованием штабелированного channel transformation (только для 8.6).

Однако, если отправка вывода в текстовый виджет Tk приемлема (я знаю, что это не совсем то, что вы просили ...) для этого уже есть package in Tcllib.

package require Tk 
package require tcl::chan::textwindow 

pack [text .t] 
set channel [tcl::chan::textwindow .t] 

puts $channel "This is a simple test." 

Этот (только для записи) канал будет работать нормально, если вы передадите его на свой код C++ для использования. (Вы можете inspect the source посмотреть, как это делается, если вы хотите, код довольно короткий.)