#include <stdbool.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <curses.h>
#include "preferences.h"
#include "userinput.h"
static void sleep_completion(void *tinst, struct user_input_state *s) {
int delay = 0;
char *p;
bool got_digit = false;
if(!strlen(s->buf)) {
user_input_set_state(NULL);
return;
}
for(p = s->buf; *p; ++p) {
if(isdigit(*p)) {
got_digit = true;
} else {
user_input_set_error_state("not a valid sleep delay");
return;
}
}
if(!strlen(s->buf) || !got_digit) {
user_input_set_error_state("not a valid sleep delay");
return;
}
delay = atoi(s->buf);
if(delay < 0) {
user_input_set_error_state("delay is negative");
return;
}
top_prefs_set_sleep(delay);
user_input_set_state(NULL);
}
static void sleep_draw(void *tinst, struct user_input_state *s, WINDOW *win,
int row, int column) {
char display[60];
if(-1 == snprintf(display, sizeof(display), "update interval[%d]: %s\n",
top_prefs_get_sleep(), s->buf))
return;
mvwaddstr(win, row, column, display);
}
struct user_input_state top_user_input_sleep_state = {
.offset = 0,
.completion = sleep_completion,
.draw = sleep_draw
};