i forgot that did nothing
This commit is contained in:
@@ -1 +0,0 @@
|
|||||||
g++-10 -fconcepts-ts $1.cpp -o $1.o && chmod +x $1.o
|
|
||||||
@@ -1,199 +0,0 @@
|
|||||||
|
|
||||||
#include <algorithm>
|
|
||||||
#include <fstream>
|
|
||||||
#include <iostream>
|
|
||||||
#include <sstream>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <sys/ioctl.h>
|
|
||||||
#include <term.h>
|
|
||||||
#include <termios.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <vector>
|
|
||||||
#include "timercpp.h"
|
|
||||||
|
|
||||||
using namespace std;
|
|
||||||
|
|
||||||
void beforeExit();
|
|
||||||
void beforeExit(int i);
|
|
||||||
void setCursor(int XPos, int YPos);
|
|
||||||
void getCursor(int* x, int* y);
|
|
||||||
void hideCursor();
|
|
||||||
void showCursor();
|
|
||||||
void clearScreen();
|
|
||||||
void clearScreen(short width, short height);
|
|
||||||
void writeAt(int x, int y, char ch);
|
|
||||||
void printFrame(vector<vector<char>> screen, short width, short height);
|
|
||||||
void screen_type(vector<vector<char>> &screen, string str, int x, int y, bool vertical);
|
|
||||||
void eachFrame(vector<vector<char>> &screen, short width, short height);
|
|
||||||
|
|
||||||
Timer t = Timer();
|
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
|
||||||
{
|
|
||||||
|
|
||||||
//^C
|
|
||||||
signal(SIGINT, beforeExit);
|
|
||||||
//abort()
|
|
||||||
signal(SIGABRT, beforeExit);
|
|
||||||
//sent by "kill" command
|
|
||||||
signal(SIGTERM, beforeExit);
|
|
||||||
//^Z
|
|
||||||
signal(SIGTSTP, beforeExit);
|
|
||||||
atexit(beforeExit);
|
|
||||||
|
|
||||||
float framerate = 10.0;
|
|
||||||
float frameduration = 1000.0/framerate;
|
|
||||||
|
|
||||||
vector<vector<char>> screen; // WILL ALWAYS BE AT LEAST 1x1
|
|
||||||
|
|
||||||
struct winsize w;
|
|
||||||
ioctl(STDOUT_FILENO, TIOCGWINSZ, &w);
|
|
||||||
// width: w.ws_col
|
|
||||||
// height: w.ws_row
|
|
||||||
|
|
||||||
for (int i = 0; i < w.ws_row-1; i++)
|
|
||||||
cout << endl;
|
|
||||||
|
|
||||||
hideCursor();
|
|
||||||
|
|
||||||
t.setInterval([&]() {
|
|
||||||
ioctl(STDOUT_FILENO, TIOCGWINSZ, &w);
|
|
||||||
|
|
||||||
if (w.ws_row > 0 && w.ws_col > 0) {
|
|
||||||
|
|
||||||
//fill vector
|
|
||||||
screen.resize(w.ws_col);
|
|
||||||
for (auto& col : screen)
|
|
||||||
col.resize(w.ws_row);
|
|
||||||
|
|
||||||
eachFrame(screen, w.ws_col, w.ws_row);
|
|
||||||
|
|
||||||
printFrame(screen, w.ws_col, w.ws_row);
|
|
||||||
}
|
|
||||||
}, (int) frameduration);
|
|
||||||
|
|
||||||
while (true);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void beforeExit()
|
|
||||||
{
|
|
||||||
//clearScreen();
|
|
||||||
setCursor(0,0);
|
|
||||||
showCursor();
|
|
||||||
t.stop();
|
|
||||||
cout << "goodbye" << endl;
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void beforeExit(int i)
|
|
||||||
{
|
|
||||||
beforeExit();
|
|
||||||
}
|
|
||||||
|
|
||||||
void setCursor(int XPos, int YPos) {
|
|
||||||
printf("\033[%d;%dH",YPos+1,XPos+1);
|
|
||||||
}
|
|
||||||
void getCursor(int* x, int* y) {
|
|
||||||
printf("\033[6n");
|
|
||||||
scanf("\033[%d;%dR", x, y);
|
|
||||||
}
|
|
||||||
|
|
||||||
void hideCursor()
|
|
||||||
{
|
|
||||||
cout << "\e[?25l" << flush;
|
|
||||||
}
|
|
||||||
|
|
||||||
void showCursor()
|
|
||||||
{
|
|
||||||
cout << "\e[?25h" << flush;
|
|
||||||
}
|
|
||||||
|
|
||||||
void writeAt(int x, int y, char ch)
|
|
||||||
{
|
|
||||||
if (ch == 0)
|
|
||||||
ch == ' ';
|
|
||||||
setCursor(x, y);
|
|
||||||
//printf("%s", ch);
|
|
||||||
cout << ch << flush;
|
|
||||||
fflush(stdout);
|
|
||||||
}
|
|
||||||
|
|
||||||
void clearScreen() {
|
|
||||||
struct winsize w;
|
|
||||||
ioctl(STDOUT_FILENO, TIOCGWINSZ, &w);
|
|
||||||
clearScreen(w.ws_col, w.ws_row);
|
|
||||||
}
|
|
||||||
|
|
||||||
void clearScreen(short width, short height)
|
|
||||||
{
|
|
||||||
setCursor(0, 0);
|
|
||||||
for (int i = 0; i < height; i++)
|
|
||||||
for (int j = 0; j < width; j++)
|
|
||||||
writeAt(j, i, ' ');
|
|
||||||
setCursor(0, 0);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void printFrame(vector<vector<char>> screen, short width, short height)
|
|
||||||
{
|
|
||||||
//print frame
|
|
||||||
for (int y = 0; y < height; y++)
|
|
||||||
{
|
|
||||||
for (int x = 0; x < width; x++)
|
|
||||||
//cout << screen.at(x).at(y);
|
|
||||||
writeAt(x, y, screen.at(x).at(y));
|
|
||||||
//cout << endl;
|
|
||||||
}
|
|
||||||
setCursor(0,0);
|
|
||||||
/*for (auto& col : screen) {
|
|
||||||
for (auto& ch : col)
|
|
||||||
cout << ch;
|
|
||||||
cout << endl;
|
|
||||||
}*/
|
|
||||||
//cout << endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
void screen_type(vector<vector<char>> &screen, string str, int x, int y, bool vertical)
|
|
||||||
{
|
|
||||||
|
|
||||||
int width = 0,
|
|
||||||
height = 0;
|
|
||||||
|
|
||||||
if (str.length()) {
|
|
||||||
|
|
||||||
//str.append("\033[0m");
|
|
||||||
|
|
||||||
width = 1;
|
|
||||||
height = 1;
|
|
||||||
|
|
||||||
if (vertical)
|
|
||||||
height = str.length();
|
|
||||||
else
|
|
||||||
width = str.length();
|
|
||||||
|
|
||||||
width = min(width, (int) screen.size() - x);
|
|
||||||
height = min(height, (int) screen.at(0).size() - y);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = x, ii = 0, d = 0; ii < width; i++, ii++)
|
|
||||||
for (int j = y, jj = 0; jj < height; j++, jj++, d++) {
|
|
||||||
//cout << str.at(d) << " " << i << "," << j << endl;
|
|
||||||
screen.at(i).at(j) = str.at(d);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void eachFrame(vector<vector<char>> &screen, short width, short height)
|
|
||||||
{
|
|
||||||
|
|
||||||
stringstream ss;
|
|
||||||
|
|
||||||
ss << width << "x" << height;
|
|
||||||
//ss << "Hello World.";
|
|
||||||
|
|
||||||
screen_type(screen, ss.str(), 10, 10, false);
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
// https: //github.com/99x/timercpp/blob/master/timercpp.h
|
|
||||||
#include <iostream>
|
|
||||||
#include <thread>
|
|
||||||
#include <chrono>
|
|
||||||
|
|
||||||
class Timer
|
|
||||||
{
|
|
||||||
bool clear = false;
|
|
||||||
|
|
||||||
public:
|
|
||||||
void setTimeout(auto function, int delay);
|
|
||||||
void setInterval(auto function, int interval);
|
|
||||||
void stop();
|
|
||||||
};
|
|
||||||
|
|
||||||
void Timer::setTimeout(auto function, int delay)
|
|
||||||
{
|
|
||||||
this->clear = false;
|
|
||||||
std::thread t([=]() {
|
|
||||||
if (this->clear)
|
|
||||||
return;
|
|
||||||
std::this_thread::sleep_for(std::chrono::milliseconds(delay));
|
|
||||||
if (this->clear)
|
|
||||||
return;
|
|
||||||
function();
|
|
||||||
});
|
|
||||||
t.detach();
|
|
||||||
}
|
|
||||||
|
|
||||||
void Timer::setInterval(auto function, int interval)
|
|
||||||
{
|
|
||||||
this->clear = false;
|
|
||||||
std::thread t([=]() {
|
|
||||||
while (true)
|
|
||||||
{
|
|
||||||
if (this->clear)
|
|
||||||
return;
|
|
||||||
std::this_thread::sleep_for(std::chrono::milliseconds(interval));
|
|
||||||
if (this->clear)
|
|
||||||
return;
|
|
||||||
function();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
t.detach();
|
|
||||||
}
|
|
||||||
|
|
||||||
void Timer::stop()
|
|
||||||
{
|
|
||||||
this->clear = true;
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user