1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246
|
/*
* hyptop - Show hypervisor performance data on System z
*
* Description of navigation keys
*
* Copyright IBM Corp. 2010, 2017
*
* s390-tools is free software; you can redistribute it and/or modify
* it under the terms of the MIT license. See LICENSE for details.
*/
#include <assert.h>
#include <stdio.h>
#include <string.h>
#include "nav_desc.h"
#include "tbox.h"
#define L_KEY_LEN 14
#define L_KEY_FMT "%-14s"
/* Select mode */
struct nav_desc nav_desc_select_mode_enter = {
.desc = "Enter select mode",
.keys = {"RIGHT", "l", NULL},
};
struct nav_desc nav_desc_select_mode_leave = {
.desc = "Leave select mode",
.keys = {"LEFT", "h", NULL},
};
/* "sys" Window */
struct nav_desc nav_desc_win_enter_sys = {
.desc = "Go to the \"sys\" window for selected system",
.keys = {"RIGHT", "l", NULL},
};
struct nav_desc nav_desc_win_leave_sys = {
.desc = "Go to the previous window",
.keys = {"LEFT", "h", "q", NULL},
};
struct nav_desc nav_desc_win_leave_sys_fast = {
.desc = "Go to the previous window",
.keys = {"q", NULL},
};
/* "fields" window */
struct nav_desc nav_desc_win_enter_fields = {
.desc = "Go to the \"fields\" window",
.keys = {"f", NULL},
} ;
struct nav_desc nav_desc_win_leave_fields = {
.desc = "Go to the previous window",
.keys = {"LEFT", "ENTER", "h", "f", "q", NULL},
};
struct nav_desc nav_desc_win_leave_fields_fast = {
.desc = "Go to the previous window",
.keys = {"f", "q", NULL},
};
/* "cpu_types" window */
struct nav_desc nav_desc_win_enter_cpu_types = {
.desc = "Go to the \"cpu_types\" window",
.keys = {"t", NULL},
};
struct nav_desc nav_desc_win_leave_cpu_types = {
.desc = "Go to the previous window",
.keys = {"LEFT", "ENTER", "h", "t", "q", NULL},
};
struct nav_desc nav_desc_win_leave_cpu_types_fast = {
.desc = "Go to the previous window",
.keys = {"t", "q", NULL},
};
/* Marks */
struct nav_desc nav_desc_marks_clear = {
.desc = "Clear all marked rows",
.keys = {"SPACE", NULL},
};
struct nav_desc nav_desc_mark_toggle = {
.desc = "Toggle mark for selected row",
.keys = {"SPACE", NULL},
};
struct nav_desc nav_desc_mark_toggle_view = {
.desc = "Toggle view for marked rows",
.keys = {".", NULL},
};
/* Units */
struct nav_desc nav_desc_col_unit_increase = {
.desc = "Increase unit type of selected column",
.keys = {"+", NULL},
};
struct nav_desc nav_desc_col_unit_decrease = {
.desc = "Decrease unit type of selected column",
.keys = {"-", NULL},
};
struct nav_desc nav_desc_row_unit_increase = {
.desc = "Increase unit type of selected row",
.keys = {"+", NULL},
};
struct nav_desc nav_desc_row_unit_decrease = {
.desc = "Decrease unit type of selected row",
.keys = {"-", NULL},
};
/* Select columns */
struct nav_desc nav_desc_select_col_next = {
.desc = "Select next column",
.keys = {">", NULL},
};
struct nav_desc nav_desc_select_col_prev = {
.desc = "Select previous column",
.keys = {"<", NULL},
};
struct nav_desc nav_desc_select_col_hotkey = {
.desc = "Select column with hotkey",
.keys = {"<key>", NULL},
};
/* Quit */
struct nav_desc nav_desc_quit = {
.desc = "Quit program",
.keys = {"q", NULL},
};
/* Select rows */
struct nav_desc nav_desc_toggle_mark_hotkey = {
.desc = "Toggle mark for row with hotkey",
.keys = {"<key>", NULL},
};
/* Navigation */
struct nav_desc nav_desc_scroll_up_line = {
.desc = "Scroll up one line",
.keys = {"UP", "k", NULL},
};
struct nav_desc nav_desc_scroll_down_line = {
.desc = "Scroll down one line",
.keys = {"DOWN", "j", NULL},
};
struct nav_desc nav_desc_scroll_up_page = {
.desc = "Scroll up one page",
.keys = {"PGUP", NULL},
};
struct nav_desc nav_desc_scroll_down_page = {
.desc = "Scroll down one page",
.keys = {"PGDOWN", NULL},
};
struct nav_desc nav_desc_scroll_up_head = {
.desc = "Scroll up to head of window",
.keys = {"g", NULL},
};
struct nav_desc nav_desc_scroll_down_tail = {
.desc = "Scroll down to tail of window",
.keys = {"G", NULL},
};
/*
* Add navigation descriptons to text box
*/
static void l_nav_desc_add(struct tbox *tb, struct nav_desc *desc)
{
char keys_str[L_KEY_LEN + 1];
unsigned int i, first;
char *key;
first = 1;
keys_str[0] = 0;
for (i = 0; (key = desc->keys[i]); i++) {
/*
* If we have used the whole space for the keys,
* we write the line and begin a new one
*/
if (strlen(desc->keys[i]) + strlen(keys_str) + 1 > L_KEY_LEN) {
tbox_printf(tb, " " L_KEY_FMT ": %s", keys_str,
desc->desc);
keys_str[0] = 0;
first = 1;
}
if (!first)
strcat(keys_str, ",");
else
first = 0;
strcat(keys_str, "'");
strcat(keys_str, desc->keys[i]);
strcat(keys_str, "'");
assert(strlen(keys_str) <= L_KEY_LEN);
}
tbox_printf(tb, " " L_KEY_FMT ": %s", keys_str, desc->desc);
}
/*
* Add navigation descriptions for "normal", "select" and "general" to text box
*/
void nav_desc_add(struct tbox *tb,
struct nav_desc **desc_normal,
struct nav_desc **desc_select,
struct nav_desc **desc_general)
{
unsigned int i;
tbox_printf(tb, "\\BSupported keys in this window\\B");
tbox_printf(tb, " ");
tbox_printf(tb, "NORMAL MODE:");
for (i = 0; (desc_normal[i]); i++)
l_nav_desc_add(tb, desc_normal[i]);
tbox_printf(tb, " ");
tbox_printf(tb, "SELECT MODE:");
for (i = 0; (desc_select[i]); i++)
l_nav_desc_add(tb, desc_select[i]);
tbox_printf(tb, " ");
tbox_printf(tb, "GENERAL:");
for (i = 0; (desc_general[i]); i++)
l_nav_desc_add(tb, desc_general[i]);
tbox_printf(tb, " ");
}
|