118 lines
2.0 KiB
C
118 lines
2.0 KiB
C
/*
|
|
* DD2 Monitoring
|
|
*
|
|
* ncurses waterfall interface
|
|
*/
|
|
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <getopt.h>
|
|
#include <ncurses.h>
|
|
|
|
|
|
#include "ecran.h"
|
|
|
|
extern int verbosity;
|
|
|
|
/* ---------------------------------------------------------------- */
|
|
WINDOW *open_waterfall(char *title, int flags)
|
|
{
|
|
WINDOW *win;
|
|
int l, c, w, h;
|
|
|
|
l = 1; c = 1;
|
|
w = COLS; h = LINES - 3;
|
|
|
|
win = newwin(h, w, l, c);
|
|
scrollok(win, 1);
|
|
waddstr(win, title); waddch(win, '\n');
|
|
wrefresh(win);
|
|
|
|
return win;
|
|
}
|
|
/* ---------------------------------------------------------------- */
|
|
int plot_waterfall(WINDOW *wf, int mode, float values[4])
|
|
{
|
|
#define TL 1000
|
|
int foo, idx;
|
|
char tag, ligne[TL+1];
|
|
float coef_w;
|
|
static long iter;
|
|
|
|
if (0 == (iter%10)) {
|
|
memset(ligne, '.', TL);
|
|
}
|
|
else {
|
|
memset(ligne, ' ', TL);
|
|
}
|
|
for (foo=0; foo<500; foo+=20) {
|
|
ligne[foo] = '.';
|
|
}
|
|
ligne[COLS-1] = '\0';
|
|
|
|
iter++;
|
|
|
|
coef_w = (float)(COLS-1) / 1024.0;
|
|
|
|
#if TRACE > 1
|
|
fprintf(stderr, "COLS = %d, coef_w = %f\n", COLS, coef_w);
|
|
#endif
|
|
|
|
switch (mode) {
|
|
|
|
case 0: default:
|
|
sprintf(ligne, "%11.3f %11.3f %11.3f %11.3f",
|
|
values[0], values[1], values[2], values[3]);
|
|
#if TRACE
|
|
fprintf(stderr, "%s [%s]\n", __func__, ligne);
|
|
#endif
|
|
break;
|
|
|
|
case 1:
|
|
for(foo=0; foo<4; foo++) {
|
|
tag = "ATOX"[foo];
|
|
idx = (int)(values[foo]*coef_w);
|
|
ligne[idx] = tag;
|
|
#if TRACE
|
|
fprintf(stderr, "%c %3d ", tag, idx);
|
|
#endif
|
|
}
|
|
ligne[COLS-1] = '\0';
|
|
#if TRACE
|
|
fprintf(stderr, "\n"); fflush(stderr);
|
|
#endif
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* poke the text in the curses window */
|
|
// scroll(wf);
|
|
waddstr(wf, ligne); waddch(wf, '\n');
|
|
wrefresh(wf);
|
|
|
|
return -1;
|
|
}
|
|
/* ---------------------------------------------------------------- */
|
|
int close_waterfall(WINDOW *wf, int notused)
|
|
{
|
|
int foo;
|
|
|
|
if (NULL == wf) {
|
|
fprintf(stderr, "%s wf is null\n", __func__);
|
|
return -1;
|
|
}
|
|
|
|
foo = delwin(wf);
|
|
if (ERR==foo) {
|
|
fprintf(stderr, "%s : err on delwin\n", __func__);
|
|
return -1;
|
|
}
|
|
return 0;
|
|
}
|
|
/* ---------------------------------------------------------------- */
|