diff --git a/viz/curses/7segments.c b/viz/curses/7segments.c index fa76ec2..853a5a2 100644 --- a/viz/curses/7segments.c +++ b/viz/curses/7segments.c @@ -7,6 +7,7 @@ #include #include #include +#include #include #include @@ -15,42 +16,93 @@ int verbosity; /* ---------------------------------------------------------------- */ -int afficheur_7segs(WINDOW * win, int lig, int col, int bits, int k) +int aff7segs_base(WINDOW * win, int lig, int col, int bits, int k) { int numbit, mask; +int foo; +for (foo=0; foo<9; foo++) { + mvwhline(win, lig+foo, col, '~', 6); + } + +wstandout(win); for (numbit=0; numbit<8; numbit++) { mask = 1 << numbit; - - switch(mask) { - + switch(mask & bits) { case 0x01: - + mvwaddstr(win, lig, col+1, " "); + break; case 0x02: - + mvwaddch(win, lig+1, col+5, ' '); + mvwaddch(win, lig+2, col+5, ' '); + mvwaddch(win, lig+3, col+5, ' '); + break; case 0x04: - + mvwaddch(win, lig+5, col+5, ' '); + mvwaddch(win, lig+6, col+5, ' '); + mvwaddch(win, lig+7, col+5, ' '); + break; case 0x08: - + mvwaddstr(win, lig+8, col+1, " "); + break; case 0x10: - + mvwaddch(win, lig+5, col, ' '); + mvwaddch(win, lig+6, col, ' '); + mvwaddch(win, lig+7, col, ' '); + break; case 0x20: - + mvwaddch(win, lig+1, col , ' '); + mvwaddch(win, lig+2, col , ' '); + mvwaddch(win, lig+3, col , ' '); + break; case 0x40: - + mvwaddstr(win, lig+4, col+1, " "); + break; case 0x80: /* decimal point */ break; - default: - fprintf(stderr, "%s mask is wrong\n", __func__); - break; } } +wstandend(win); -return -1; +return 0; } /* ---------------------------------------------------------------- */ +int aff7segs_digit(WINDOW * win, int lig, int col, char digit) +{ +int bits; + +#if TRACE +fprintf(stderr, ">>> %s ( %p %d %d '%c' )\n", __func__, + win, lig, col, digit); +#endif + +if (!isdigit(digit)) { + return -1; + } + +switch (digit) { + case '0': bits = 0x3f; break; + case '1': bits = 0x06; break; + case '2': bits = 0x5b; break; + case '3': bits = 0x4f; break; + case '4': bits = 0x66; break; + case '5': bits = 0x6d; break; + case '6': bits = 0x7d; break; + case '7': bits = 0x07; break; + case '8': bits = 0x7f; break; + case '9': bits = 0x6f; break; + + default: + bits = 0x40; + break; + } + +aff7segs_base(win, lig, col, bits, 0); + +return 0; +} /* ---------------------------------------------------------------- */ diff --git a/viz/curses/ecran.h b/viz/curses/ecran.h index ceac133..c2bba24 100644 --- a/viz/curses/ecran.h +++ b/viz/curses/ecran.h @@ -5,6 +5,9 @@ int fond_ecran(char *titre); int message(char *); +int aff7segs_base(WINDOW * win, int lig, int col, int bits, int k); +int aff7segs_digit(WINDOW * win, int lig, int col, char digit); + WINDOW * open_waterfall(char *title, int flags); int plot_waterfall(WINDOW *wf, int flags, float values[4]); diff --git a/viz/curses/t.c b/viz/curses/t.c index ba0fd62..1b11ea7 100644 --- a/viz/curses/t.c +++ b/viz/curses/t.c @@ -1,7 +1,7 @@ #include #include #include -#include +#include #include #include #include @@ -10,12 +10,39 @@ int verbosity; +/* ---------------------------------------------------------------- */ +void demo_7segments(int nbl, int notused) +{ +int loop, idx, c, p; +char ligne[100]; + + +for (idx=0; idx<10; idx++) { + c = '0'+idx; + p = 1+(idx*8); + aff7segs_digit(stdscr, 17, p, c); + mvaddch(16, p, c); + } + +for (loop=0; loop