From 5349d695dab92be7921bdca51f55e3e3d0a9278a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=91=D1=8B=D1=87=D0=BA=D0=BE=D0=B2=20=D0=90=D0=BD=D0=B4?= =?UTF-8?q?=D1=80=D0=B5=D0=B9?= Date: Mon, 17 Apr 2017 13:04:53 +0000 Subject: [PATCH] git-svn-id: svn://db.shs.com.ru/pip@386 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5 --- src/console/piconsole.cpp | 103 +++++++++++++++++++++++++++++++++----- src/console/piconsole.h | 13 ----- src/core/piincludes_p.h | 8 +-- 3 files changed, 95 insertions(+), 29 deletions(-) diff --git a/src/console/piconsole.cpp b/src/console/piconsole.cpp index b0b12781..5b61c7aa 100644 --- a/src/console/piconsole.cpp +++ b/src/console/piconsole.cpp @@ -422,21 +422,98 @@ inline int PIConsole::couts(const PISystemTime & v) { } +void PIConsole::toUpperLeft() { #ifdef WINDOWS -void PIConsole::toUpperLeft() {SetConsoleCursorPosition(PRIVATE->hOut, PRIVATE->ulcoord);} -void PIConsole::moveRight(int n) {SetConsoleCursorPosition(PRIVATE->hOut, PRIVATE->getWinCoord(n));} -void PIConsole::moveLeft(int n) {SetConsoleCursorPosition(PRIVATE->hOut, PRIVATE->getWinCoord(-n));} -void PIConsole::moveTo(int x, int y) {PRIVATE->ccoord.X = x; PRIVATE->ccoord.Y = PRIVATE->ulcoord.Y + y; SetConsoleCursorPosition(PRIVATE->hOut, PRIVATE->ccoord);} -void PIConsole::clearScreen() {couts(fstr(Normal)); toUpperLeft(); FillConsoleOutputAttribute(PRIVATE->hOut, PRIVATE->dattr, width * (height + 1), PRIVATE->ulcoord, &PRIVATE->written); - FillConsoleOutputCharacter(PRIVATE->hOut, ' ', width * (height + 1), PRIVATE->ulcoord, &PRIVATE->written);} -void PIConsole::clearScreenLower() {couts(fstr(Normal)); PRIVATE->getWinCurCoord(); FillConsoleOutputAttribute(PRIVATE->hOut, PRIVATE->dattr, width * height - width * PRIVATE->ccoord.Y + PRIVATE->ccoord.X, PRIVATE->ccoord, &PRIVATE->written); - FillConsoleOutputCharacter(PRIVATE->hOut, ' ', width * height - width * PRIVATE->ccoord.Y + PRIVATE->ccoord.X, PRIVATE->ccoord, &PRIVATE->written);} -void PIConsole::clearLine() {PRIVATE->getWinCurCoord(); FillConsoleOutputAttribute(PRIVATE->hOut, PRIVATE->dattr, width - PRIVATE->ccoord.X, PRIVATE->ccoord, &PRIVATE->written); - FillConsoleOutputCharacter(PRIVATE->hOut, ' ', width - PRIVATE->ccoord.X, PRIVATE->ccoord, &PRIVATE->written);} -void PIConsole::newLine() {PRIVATE->getWinCurCoord(); PRIVATE->ccoord.X = 0; PRIVATE->ccoord.Y++; SetConsoleCursorPosition(PRIVATE->hOut, PRIVATE->ccoord);} -void PIConsole::hideCursor() {PRIVATE->curinfo.bVisible = false; SetConsoleCursorInfo(PRIVATE->hOut, &PRIVATE->curinfo);} -void PIConsole::showCursor() {PRIVATE->curinfo.bVisible = true; SetConsoleCursorInfo(PRIVATE->hOut, &PRIVATE->curinfo);} + SetConsoleCursorPosition(PRIVATE->hOut, PRIVATE->ulcoord); +#else + printf("\e[H"); #endif +} + +void PIConsole::moveRight(int n) { +#ifdef WINDOWS + SetConsoleCursorPosition(PRIVATE->hOut, PRIVATE->getWinCoord(n)); +#else + if (n > 0) printf("\e[%dC", n); +#endif +} + +void PIConsole::moveLeft(int n) { +#ifdef WINDOWS + SetConsoleCursorPosition(PRIVATE->hOut, PRIVATE->getWinCoord(-n)); +#else + if (n > 0) printf("\e[%dD", n); +#endif +} + +void PIConsole::moveTo(int x, int y) { +#ifdef WINDOWS + PRIVATE->ccoord.X = x; + PRIVATE->ccoord.Y = PRIVATE->ulcoord.Y + y; + SetConsoleCursorPosition(PRIVATE->hOut, PRIVATE->ccoord); +#else + printf("\e[%d;%dH", y, x); +#endif +} + +void PIConsole::clearScreen() { +#ifdef WINDOWS + couts(fstr(Normal)); + toUpperLeft(); + FillConsoleOutputAttribute(PRIVATE->hOut, PRIVATE->dattr, width * (height + 1), PRIVATE->ulcoord, &PRIVATE->written); + FillConsoleOutputCharacter(PRIVATE->hOut, ' ', width * (height + 1), PRIVATE->ulcoord, &PRIVATE->written); +#else + couts(fstr(Normal)); printf("\e[H\e[J"); +#endif +} + +void PIConsole::clearScreenLower() { +#ifdef WINDOWS + couts(fstr(Normal)); + PRIVATE->getWinCurCoord(); + FillConsoleOutputAttribute(PRIVATE->hOut, PRIVATE->dattr, width * height - width * PRIVATE->ccoord.Y + PRIVATE->ccoord.X, PRIVATE->ccoord, &PRIVATE->written); + FillConsoleOutputCharacter(PRIVATE->hOut, ' ', width * height - width * PRIVATE->ccoord.Y + PRIVATE->ccoord.X, PRIVATE->ccoord, &PRIVATE->written); +#else + couts(fstr(Normal)); printf("\e[J"); +#endif +} + +void PIConsole::clearLine() { +#ifdef WINDOWS + PRIVATE->getWinCurCoord(); + FillConsoleOutputAttribute(PRIVATE->hOut, PRIVATE->dattr, width - PRIVATE->ccoord.X, PRIVATE->ccoord, &PRIVATE->written); + FillConsoleOutputCharacter(PRIVATE->hOut, ' ', width - PRIVATE->ccoord.X, PRIVATE->ccoord, &PRIVATE->written); +#else + printf("\e[K"); +#endif +} + +void PIConsole::newLine() { +#ifdef WINDOWS + PRIVATE->getWinCurCoord(); + PRIVATE->ccoord.X = 0; PRIVATE->ccoord.Y++; + SetConsoleCursorPosition(PRIVATE->hOut, PRIVATE->ccoord); +#else + printf("\eE"); +#endif +} + +void PIConsole::hideCursor() { +#ifdef WINDOWS + PRIVATE->curinfo.bVisible = false; + SetConsoleCursorInfo(PRIVATE->hOut, &PRIVATE->curinfo); +#else + printf("\e[?25l"); +#endif +} + +void PIConsole::showCursor() { +#ifdef WINDOWS + PRIVATE->curinfo.bVisible = true; SetConsoleCursorInfo(PRIVATE->hOut, &PRIVATE->curinfo); +#else + printf("\e[?25h"); +#endif +} void PIConsole::begin() { diff --git a/src/console/piconsole.h b/src/console/piconsole.h index e25d2bec..9b1e3185 100644 --- a/src/console/piconsole.h +++ b/src/console/piconsole.h @@ -248,7 +248,6 @@ public: void disconnect(); bool isConnected() const {return state == Connected;} -#ifdef WINDOWS void toUpperLeft(); void moveRight(int n = 1); void moveLeft(int n = 1); @@ -259,18 +258,6 @@ public: void newLine(); void hideCursor(); void showCursor(); -#else - void toUpperLeft() {printf("\e[H");} - void moveRight(int n = 1) {if (n > 0) printf("\e[%dC", n);} - void moveLeft(int n = 1) {if (n > 0) printf("\e[%dD", n);} - void moveTo(int x = 0, int y = 0) {printf("\e[%d;%dH", y, x);} - void clearScreen() {couts(fstr(Normal)); printf("\e[H\e[J");} - void clearScreenLower() {couts(fstr(Normal)); printf("\e[J");} - void clearLine() {printf("\e[K");} - void newLine() {printf("\eE");} - void hideCursor() {printf("\e[?25l");} - void showCursor() {printf("\e[?25h");} -#endif EVENT_HANDLER0(void, clearVariables) {clearVariables(true);} EVENT_HANDLER1(void, clearVariables, bool, clearScreen); diff --git a/src/core/piincludes_p.h b/src/core/piincludes_p.h index 88800d3a..95afe455 100644 --- a/src/core/piincludes_p.h +++ b/src/core/piincludes_p.h @@ -29,11 +29,13 @@ typedef void(*PINtSetTimerResolution)(ULONG, BOOLEAN, PULONG); #ifdef CC_GCC # include #endif -#include -#include #include -#include +#include +#include #include +#include +#include +#include #include