CPPConsole
Loading...
Searching...
No Matches
erase.hpp
Go to the documentation of this file.
1#ifndef __CPP_CONSOLE_ERASE_HPP__
2#define __CPP_CONSOLE_ERASE_HPP__
3
4#include <iostream>
5
6#ifdef __WIN32
7#include <Windows.h>
8#else
9#include <stdio.h>
10#include <sys/ioctl.h>
11#include <termios.h>
12#include <unistd.h>
13#endif
14
15#include "ansi.hpp"
16#include "console.hpp"
17
21namespace console {
22#ifdef __WIN32
23typedef struct {
24 HANDLE hConsole;
25 CONSOLE_SCREEN_BUFFER_INFO csbi;
26} ConsoleInfo;
27
28ConsoleInfo getConsoleInfo() {
29 ConsoleInfo info;
30 info.hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
31 if (info.hConsole == INVALID_HANDLE_VALUE) {
32 std::cerr << "Error: Unable to get console handle." << std::endl;
33 return info;
34 }
35 if (!GetConsoleScreenBufferInfo(info.hConsole, &info.csbi)) {
36 std::cerr << "Error: Unable to get console screen buffer info."
37 << std::endl;
38 return info;
39 }
40 return info;
41}
42#endif
43
48 if (isANSIEnabled()) {
49 std::cout << "\033[0J";
50 return;
51 }
52#ifdef __WIN32
53 ConsoleInfo info = getConsoleInfo();
54 DWORD cellsToClear =
55 info.csbi.dwSize.X *
56 (info.csbi.dwSize.Y - info.csbi.dwCursorPosition.Y - 1) +
57 (info.csbi.dwSize.X - info.csbi.dwCursorPosition.X);
58 DWORD charsWritten;
59 COORD startCoord = info.csbi.dwCursorPosition;
60 FillConsoleOutputCharacter(info.hConsole, ' ', cellsToClear, startCoord,
61 &charsWritten);
62 FillConsoleOutputAttribute(info.hConsole, info.csbi.wAttributes,
63 cellsToClear, startCoord, &charsWritten);
64 SetConsoleCursorPosition(info.hConsole, info.csbi.dwCursorPosition);
65#endif
66}
67
72 if (isANSIEnabled()) {
73 std::cout << "\033[1J";
74 return;
75 }
76#ifdef __WIN32
77 ConsoleInfo info = getConsoleInfo();
78 DWORD cellsToClear = info.csbi.dwCursorPosition.Y * info.csbi.dwSize.X +
79 info.csbi.dwCursorPosition.X + 1;
80 DWORD charsWritten;
81 COORD startCoord = {0, 0};
82 FillConsoleOutputCharacter(info.hConsole, ' ', cellsToClear, startCoord,
83 &charsWritten);
84 FillConsoleOutputAttribute(info.hConsole, info.csbi.wAttributes,
85 cellsToClear, startCoord, &charsWritten);
86 SetConsoleCursorPosition(info.hConsole, info.csbi.dwCursorPosition);
87#endif
88}
89
94 if (isANSIEnabled()) {
95 std::cout << "\033[2J";
96 return;
97 }
98#ifdef __WIN32
99 ConsoleInfo info = getConsoleInfo();
100 DWORD cellsToClear = info.csbi.dwSize.X * info.csbi.dwSize.Y;
101 DWORD charsWritten;
102 COORD startCoord = {0, 0};
103 FillConsoleOutputCharacter(info.hConsole, ' ', cellsToClear, startCoord,
104 &charsWritten);
105 FillConsoleOutputAttribute(info.hConsole, info.csbi.wAttributes,
106 cellsToClear, startCoord, &charsWritten);
107#endif
108}
109
114 if (isANSIEnabled()) {
115 std::cout << "\033[0K";
116 return;
117 }
118#ifdef __WIN32
119 ConsoleInfo info = getConsoleInfo();
120 DWORD cellsToClear = info.csbi.dwSize.X - info.csbi.dwCursorPosition.X;
121 DWORD charsWritten;
122 COORD startCoord = info.csbi.dwCursorPosition;
123 FillConsoleOutputCharacter(info.hConsole, ' ', cellsToClear, startCoord,
124 &charsWritten);
125 FillConsoleOutputAttribute(info.hConsole, info.csbi.wAttributes,
126 cellsToClear, startCoord, &charsWritten);
127 SetConsoleCursorPosition(info.hConsole, info.csbi.dwCursorPosition);
128#endif
129}
130
135 if (isANSIEnabled()) {
136 std::cout << "\033[1K";
137 return;
138 }
139
140#ifdef __WIN32
141 ConsoleInfo info = getConsoleInfo();
142 DWORD cellsToClear = info.csbi.dwCursorPosition.X + 1;
143 DWORD charsWritten;
144 COORD startCoord = {0, info.csbi.dwCursorPosition.Y};
145 FillConsoleOutputCharacter(info.hConsole, ' ', cellsToClear, startCoord,
146 &charsWritten);
147 FillConsoleOutputAttribute(info.hConsole, info.csbi.wAttributes,
148 cellsToClear, startCoord, &charsWritten);
149 SetConsoleCursorPosition(info.hConsole, info.csbi.dwCursorPosition);
150#endif
151}
152
157 if (isANSIEnabled()) {
158 std::cout << "\033[2K";
159 return;
160 }
161#ifdef __WIN32
162 ConsoleInfo info = getConsoleInfo();
163 DWORD cellsToClear = info.csbi.dwSize.X;
164 DWORD charsWritten;
165 COORD startCoord = {0, info.csbi.dwCursorPosition.Y};
166 FillConsoleOutputCharacter(info.hConsole, ' ', cellsToClear, startCoord,
167 &charsWritten);
168 FillConsoleOutputAttribute(info.hConsole, info.csbi.wAttributes,
169 cellsToClear, startCoord, &charsWritten);
170 SetConsoleCursorPosition(info.hConsole, info.csbi.dwCursorPosition);
171#endif
172}
173} // namespace console
174
175#endif
Namespace Containing all console commands.
Definition ansi.hpp:16
void eraseFromCursorToBOL()
Erases from the cursor position to the beginning of the line.
Definition erase.hpp:134
void eraseFromCursorToEOL()
Erases from the cursor position to the end of the line.
Definition erase.hpp:113
void eraseCurrentLine()
Erases the line the cursor is currently on.
Definition erase.hpp:156
void eraseEntireScreen()
Erases the entire screen.
Definition erase.hpp:93
void eraseFromCursorToEOS()
Erases the screen from the cursor to the end of screen.
Definition erase.hpp:47
bool isANSIEnabled()
Checks if ANSI Codes are enable in windows.
Definition ansi.hpp:22
void eraseFromCursorToBOS()
Erases the screen from the cursor to the beginning of screen.
Definition erase.hpp:71