alsa-visual/spark_ncurses.c

108 lines
1.6 KiB
C
Raw Normal View History

2024-03-24 06:37:10 +00:00
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <ncurses.h>
#include <sys/ioctl.h>
#include <ctype.h>
#include <math.h>
2024-03-30 14:11:03 +00:00
#define NARGS 1024
2024-03-24 06:37:10 +00:00
#define ARG_SIZE 50
int args;
2024-03-30 14:11:03 +00:00
int values[NARGS + 1];
2024-03-24 06:37:10 +00:00
struct winsize ws;
int add_value(const char *str) {
2024-03-30 14:11:03 +00:00
if (args >= sizeof(values) / sizeof(int) || args > ws.ws_col)
2024-03-24 06:37:10 +00:00
return 1;
2024-03-30 14:11:03 +00:00
values[args] = atoi(str);
2024-03-24 06:37:10 +00:00
args++;
return 0;
}
void stdin_read(void) {
char arg[ARG_SIZE + 1];
char *p = arg;
while (1) {
int c = getchar();
if (c == EOF)
return;
else if (c == ' ' && p != arg) {
*p = '\0';
p = arg;
if (add_value(arg))
break;
}
else {
*p = c;
if (p + 1 == arg + sizeof(arg))
break;
p++;
}
}
}
void sig_handler(int sig) {
(void)sig;
endwin();
exit(0);
}
int main(void) {
signal(SIGINT, sig_handler);
2024-03-30 14:11:03 +00:00
signal(SIGTERM, sig_handler);
2024-03-24 06:37:10 +00:00
if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &ws) < 0)
return 1;
initscr();
2024-03-30 14:11:03 +00:00
noecho();
2024-03-24 06:37:10 +00:00
curs_set(0);
timeout(0);
2024-03-30 14:11:03 +00:00
int min = 0;
int max = 0;
2024-03-24 06:37:10 +00:00
2024-03-30 14:11:03 +00:00
int middle = ws.ws_row / 2;
2024-03-24 06:37:10 +00:00
while (1) {
args = 0;
stdin_read();
clear();
2024-03-30 14:11:03 +00:00
for (int i = 0; i < args; i++) {
if (values[i] < min)
min = values[i];
else if (values[i] > max)
max = values[i];
int val = (values[i] - min) * 10 / ((max - min) + 1);
for (int j = 0; j < val; j++) {
mvprintw(middle - 2 - j, i, "#");
mvprintw(middle + 2 + j, i, "#");
}
}
2024-03-25 15:11:13 +00:00
2024-03-30 14:11:03 +00:00
/* Vol */
int val = (values[args - 1] - min) * ws.ws_col / ((max - min) + 1);
for (int j = 0; j < val; j++) {
mvprintw(middle - 1, ws.ws_col - j, "<=");
mvprintw(middle + 1, ws.ws_col - j, "<=");
}
2024-03-24 06:37:10 +00:00
refresh();
}
}