From ac5d7f8e33e9ed636900e0e488c6508ce96d3079 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9F=D0=B5=D0=BB=D0=B8=D0=BF=D0=B5=D0=BD=D0=BA=D0=BE=20?= =?UTF-8?q?=D0=98=D0=B2=D0=B0=D0=BD?= Date: Tue, 7 Apr 2015 07:34:05 +0000 Subject: [PATCH] ClearLine PICoutManipulator git-svn-id: svn://db.shs.com.ru/pip@66 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5 --- src/core/picout.cpp | 21 +++++++++++++++++++++ src/core/picout.h | 1 + utils/udp_file_transfer/main.cpp | 5 +++-- 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/core/picout.cpp b/src/core/picout.cpp index 8011400d..b04404be 100644 --- a/src/core/picout.cpp +++ b/src/core/picout.cpp @@ -138,6 +138,27 @@ PICout PICout::operator <<(const PICoutAction v) { SetConsoleCursorInfo(__Private__::hOut, &curinfo); #else printf("\e[?25l"); +#endif + } + break; + case PICoutManipulators::ClearLine: + if (!PICout::buffer_) { +#ifdef WINDOWS + GetConsoleScreenBufferInfo(__Private__::hOut, &sbi); + coord = sbi.dwCursorPosition; + int dx = coord.X; + coord.X = 0; + SetConsoleCursorPosition(__Private__::hOut, coord); + if (dx > 0) { + char * line = new char[dx + 1]; + memset(line, ' ', dx); + line[dx] = 0; + printf("%s", line); + delete line; + } + SetConsoleCursorPosition(__Private__::hOut, coord); +#else + printf("\e[0G\e[K"); #endif } break; diff --git a/src/core/picout.h b/src/core/picout.h index 1ff8f287..d4e7bb0c 100644 --- a/src/core/picout.h +++ b/src/core/picout.h @@ -59,6 +59,7 @@ namespace PICoutManipulators { Backspace /*! Remove last symbol */, ShowCursor /*! Show cursor */, HideCursor /*! Hide cursor */, + ClearLine /*! Clear current line */, ClearScreen /*! Clear the screen */, SaveContol /*! Save control flags, equivalent to \a saveControl() */, RestoreControl /*! Restore control flags, equivalent to \a restoreControl() */ diff --git a/utils/udp_file_transfer/main.cpp b/utils/udp_file_transfer/main.cpp index 46935db1..6b1e2c07 100644 --- a/utils/udp_file_transfer/main.cpp +++ b/utils/udp_file_transfer/main.cpp @@ -35,10 +35,10 @@ private: } EVENT_HANDLER(void, ftevent) { - piCout << ft.stateString() << PIString::readableSize(ft.diagnostic().receiveBytesPerSec()) + "/s" + PICout(PICoutManipulators::AddSpaces) << PICoutManipulators::ClearLine << ft.stateString() << PIString::readableSize(ft.diagnostic().receiveBytesPerSec()) + "/s" << PIString::readableSize(ft.diagnostic().sendBytesPerSec()) + "/s" << "(" << PIString::readableSize(ft.bytesFileCur()) << "/" << PIString::readableSize(ft.bytesFileAll()) << ", " - << PIString::readableSize(ft.bytesCur()) << "/" << PIString::readableSize(ft.bytesAll()) << ")"; + << PIString::readableSize(ft.bytesCur()) << "/" << PIString::readableSize(ft.bytesAll()) << ")" << PICoutManipulators::Flush; } EVENT_HANDLER1(void, ftsend, PIByteArray &, data) { @@ -72,6 +72,7 @@ int main (int argc, char * argv[]) { piCout << "wait for receiving"; } WAIT_FOR_EXIT + PICout() << "\n"; return 0; }