added progress bar

This commit is contained in:
Jay Robson 2024-08-27 01:02:15 +10:00
parent 0037292a63
commit 4ade94e285
1 changed files with 34 additions and 3 deletions

View File

@ -5,6 +5,34 @@
#include <ostream>
#include <string>
#include <unistd.h>
#include <sys/ioctl.h>
const char CLEAR_LINE[] = "\x1b[2K";
static void display_progress(unsigned long at, unsigned long size) {
struct winsize w;
ioctl(STDOUT_FILENO, TIOCGWINSZ, &w);
unsigned cols = w.ws_col - 8;
std::cout << "[";
unsigned long j = at * cols / size;
for(unsigned long i = 0; i < cols; i++) {
char ch;
if(i > j) {
ch = ' ';
} else if(i == j) {
ch = '>';
} else {
ch = '=';
}
std::cout << ch;
}
std::cout << "] " << (at * 100 / size) << "%\r" << std::flush;
}
int main(int argc, char** argv) {
std::string data;
@ -14,6 +42,8 @@ int main(int argc, char** argv) {
return 1;
}
std::cout << "loaded: " << data.length() << " bytes" << std::endl;
unsigned at = 0;
Device device(argv[1]);
device.put(Device::Mode::e_serial);
@ -22,12 +52,12 @@ int main(int argc, char** argv) {
Device::Mode mode = (Device::Mode)device.get();
switch(mode) {
default: {
std::cout << "device: unknown (" << mode << ")" << std::endl;
std::cout << CLEAR_LINE << "device: unknown (" << mode << ")" << std::endl;
break;
}
case Device::Mode::e_ready: {
device.put(Device::Mode::e_serial);
std::cout << "device: ready" << std::endl;
std::cout << CLEAR_LINE << "device: ready" << std::endl;
break;
}
case Device::Mode::e_jump: {
@ -35,7 +65,6 @@ int main(int argc, char** argv) {
at = (at << 8) | (device.get() & 0xff);
at = (at << 8) | (device.get() & 0xff);
at = (at << 8) | (device.get() & 0xff);
std::cout << "device: jump (" << at << ")" << std::endl;
break;
}
case Device::Mode::e_read: {
@ -53,6 +82,8 @@ int main(int argc, char** argv) {
}
break;
}}
display_progress(at, data.length());
}
}