Commit 78cb6599 authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Internalize the VSC levels, and expose a function to increase/decrease.

parent dfe21045
......@@ -117,7 +117,7 @@ static WINDOW *w_points = NULL;
static WINDOW *w_bar_b = NULL;
static WINDOW *w_info = NULL;
static int verbosity = VSC_level_info;
static const struct VSC_level_desc *verbosity;
static int keep_running = 1;
static int hide_unseen = 1;
static int page_start = 0;
......@@ -216,7 +216,7 @@ build_pt_array(void)
CHECK_OBJ_NOTNULL(pt, PT_MAGIC);
if (!pt->seen && hide_unseen)
continue;
if (pt->vpt->desc->level->verbosity > verbosity)
if (pt->vpt->desc->level > verbosity)
continue;
assert(n_ptarray < n_ptlist);
ptarray[n_ptarray++] = pt;
......@@ -938,7 +938,6 @@ static void
draw_bar_b(void)
{
int x, X;
const struct VSC_level_desc *level;
char buf[64];
AN(w_bar_b);
......@@ -959,11 +958,10 @@ draw_bar_b(void)
mvwprintw(w_bar_b, 0, X - strlen(buf), "%s", buf);
X -= strlen(buf) + 2;
level = VSC_LevelDesc(verbosity);
if (level != NULL) {
mvwprintw(w_bar_b, 0, X - strlen(level->label), "%s",
level->label);
X -= strlen(level->label) + 2;
if (verbosity != NULL) {
mvwprintw(w_bar_b, 0, X - strlen(verbosity->label), "%s",
verbosity->label);
X -= strlen(verbosity->label) + 2;
}
if (!hide_unseen)
mvwprintw(w_bar_b, 0, X - 6, "%s", "UNSEEN");
......@@ -1045,9 +1043,11 @@ handle_keypress(int ch)
page_start = (current - l_points) + 1;
break;
case 'v':
verbosity++;
if (VSC_LevelDesc(verbosity) == NULL)
verbosity = 0;
verbosity = VSC_ChangeLevel(verbosity, 1);
rebuild = 1;
break;
case 'V':
verbosity = VSC_ChangeLevel(verbosity, -1);
rebuild = 1;
break;
case 'q':
......@@ -1081,6 +1081,8 @@ do_curses(struct VSM_data *vd, double delay)
interval = delay;
verbosity = VSC_ChangeLevel(NULL, 0);
initscr();
raw();
noecho();
......
......@@ -78,7 +78,7 @@ struct VSC_desc;
struct VSC_point;
struct VSC_level_desc {
unsigned verbosity;
const char *name; /* name */
const char *label; /* label */
const char *sdesc; /* short description */
const char *ldesc; /* long description */
......@@ -138,6 +138,6 @@ int VSC_Iter(struct VSM_data *vd, struct VSM_fantom *fantom, VSC_iter_f *func,
* 0: Done
*/
const struct VSC_level_desc *VSC_LevelDesc(unsigned level);
const struct VSC_level_desc *VSC_ChangeLevel(const struct VSC_level_desc*, int);
#endif /* VAPI_VSC_H_INCLUDED */
......@@ -29,11 +29,3 @@
*/
#define VSC_CLASS "Stat"
/* vsc levels */
enum VSC_level_e {
#define VSC_LEVEL_F(v,l,e,d) \
VSC_level_##v,
#include "tbl/vsc_levels.h"
VSC_level_MAX,
};
......@@ -175,3 +175,8 @@ LIBVARNISHAPI_1.6 {
VTIM_timespec;
VTIM_timeval;
} LIBVARNISHAPI_1.0;
LIBVARNISHAPI_1.7 {
global:
VSC_ChangeLevel;
} LIBVARNISHAPI_1.0;
......@@ -104,17 +104,24 @@ struct vsc {
* Build the static level, type and point descriptions
*/
#define VSC_LEVEL_F(v,l,e,d) \
const struct VSC_level_desc VSC_level_desc_##v = \
{VSC_level_##v, l, e, d};
#define VSC_LEVEL_F(v,l,e,d) \
static const struct VSC_level_desc level_##v = {#v, l, e, d};
#include "tbl/vsc_levels.h"
static const struct VSC_level_desc * const levels[] = {
#define VSC_LEVEL_F(v,l,e,d) &level_##v,
#include "tbl/vsc_levels.h"
#undef VSC_LEVEL_F
};
static const size_t nlevels =
sizeof(levels)/sizeof(*levels);
#define VSC_TYPE_F(n,t,l,e,d) const char *VSC_type_##n = t;
#include "tbl/vsc_types.h"
#define VSC_DO(U,l,t,h) const struct VSC_desc VSC_desc_##l[] = {
#define VSC_F(n,t,l,s,f,v,d,e) {#n,#t,s,f,&VSC_level_desc_##v,d,e},
#define VSC_F(n,t,l,s,f,v,d,e) {#n,#t,s,f,&level_##v,d,e},
#define VSC_DONE(U,l,t) };
#include "tbl/vsc_all.h"
......@@ -479,16 +486,23 @@ VSC_Iter(struct VSM_data *vd, struct VSM_fantom *fantom, VSC_iter_f *func,
*/
const struct VSC_level_desc *
VSC_LevelDesc(unsigned level)
VSC_ChangeLevel(const struct VSC_level_desc *old, int chg)
{
switch (level) {
#define VSC_LEVEL_F(v,l,e,d) \
case VSC_level_##v: \
return (&VSC_level_desc_##v);
#include "tbl/vsc_levels.h"
#undef VSC_LEVEL_F
default:
return (NULL);
}
int i;
if (old == NULL)
old = levels[0];
for (i = 0; i < nlevels; i++)
if (old == levels[i])
break;
if (i == nlevels)
i = 0;
else
i += chg;
if (i >= nlevels)
i = nlevels - 1;
if (i < 0)
i = 0;
return (levels[i]);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment