* @req: An ncurses request or char to send to form_driver().
*/
-static void ked_move_cursor(struct ked *ked, int req)
+static int ked_move_cursor(struct ked *ked, int req)
{
+ int result;
+
wchgat(ked->scr.sub_ncw, 1, ked_attr_field_selected, 0, 0);
- form_driver(ked->ncf, req);
+ result = form_driver(ked->ncf, req);
wchgat(ked->scr.sub_ncw, 1, ked->attr_cursor, 0, 0);
wrefresh(ked->scr.main_ncw);
+ return result;
}
/**
* @req: An ncurses request to send to form_driver().
*/
-static void ked_move_field(struct ked *ked, int req)
+static int ked_move_field(struct ked *ked, int req)
{
+ int result;
+
set_field_back(current_field(ked->ncf), ked_attr_field_normal);
- form_driver(ked->ncf, req);
+ result = form_driver(ked->ncf, req);
set_field_back(current_field(ked->ncf), ked_attr_field_selected);
ked_move_cursor(ked, REQ_END_FIELD);
+ return result;
}
static int ked_post(struct nc_scr *scr)
for (; s < s_end; s++)
if (*s != ' ' && *s != '\t')
break;
- start = s;
- for (++s; s < s_end; s++)
+ start = end = s;
+
+ for (; s < s_end; s++)
if (*s != ' ' && *s != '\t')
end = s;
*(end + 1) = 0;
static void ked_process_key(struct nc_scr *scr)
{
struct ked *ked = ked_from_scr(scr);
+ struct pb_kexec_data *kd;
while (1) {
int c = getch();
+ if (c == ERR)
+ return;
+
+ /* DBGS("%d (%o)\n", c, c); */
+
switch (c) {
default:
ked_move_cursor(ked, c);
- break;
- case ERR:
- return;
+ break;
/* hot keys */
- case 2: { /* CTRL-B */
- struct pb_kexec_data *kd;
-
- form_driver(ked->ncf, REQ_VALIDATION);
- kd = ked_prepare_data(ked);
- ked->on_exit(ked, ked_boot, kd);
- nc_flush_keys();
- return;
- }
case 27: /* ESC */
ked->on_exit(ked, ked_cancel, NULL);
nc_flush_keys();
return;
case '\n':
- case '\r': {
- struct pb_kexec_data *kd;
-
+ case '\r':
form_driver(ked->ncf, REQ_VALIDATION);
kd = ked_prepare_data(ked);
ked->on_exit(ked, ked_update, kd);
nc_flush_keys();
return;
- }
/* insert mode */
case KEY_IC:
ked_move_cursor(ked, REQ_RIGHT_CHAR);
break;
case KEY_BACKSPACE:
- ked_move_cursor(ked, REQ_LEFT_CHAR);
- ked_move_cursor(ked, REQ_DEL_CHAR);
+ if (ked_move_cursor(ked, REQ_LEFT_CHAR) == E_OK)
+ ked_move_cursor(ked, REQ_DEL_CHAR);
break;
case KEY_DC:
ked_move_cursor(ked, REQ_DEL_CHAR);
ked->scr.frame.title = talloc_strdup(ked, "Petitboot Option Editor");
ked->scr.frame.help = talloc_strdup(ked,
- "ESC=cancel, Enter=accept, Ctrl-b=boot");
+ "ESC=cancel, Enter=accept");
ked->on_exit = on_exit;