From 5ed7374aa765b8e0a5380590efcefa5c6ddcdb06 Mon Sep 17 00:00:00 2001 From: Apaczer <94932128+Apaczer@users.noreply.github.com> Date: Wed, 27 Mar 2024 21:26:08 +0100 Subject: [PATCH 1/7] mod input_loop() char result stack with arrow keys --- sdlbook.c | 52 +++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 47 insertions(+), 5 deletions(-) diff --git a/sdlbook.c b/sdlbook.c index 33a2f29..d608aba 100644 --- a/sdlbook.c +++ b/sdlbook.c @@ -589,6 +589,7 @@ static void input_loop(const char* title, char *result, enum input_flags flags) ezsdl_update_region(0, 0, ezsdl_get_width(), MIN(desired_height, ezsdl_get_height())); char* p = result; *p = 0; + int p_n = 48; struct event event; while(1) { enum eventtypes e; @@ -597,20 +598,61 @@ static void input_loop(const char* title, char *result, enum input_flags flags) case EV_QUIT: case EV_KEYUP: switch(event.which) { - case SDLK_BACKSPACE: + case SDLK_BACKSPACE: case SDLK_LEFT: + if(flags == INPUT_LOOP_RET) + goto out; if(p > result) p--; + p_n = *(p - 1); *p = 0; goto drawit; - case SDLK_RETURN: case SDLK_ESCAPE: + case SDLK_RIGHT: + if(flags == INPUT_LOOP_RET) + goto out; + if(p - result < 20) { + p_n = 48; + *(p++) = p_n; + *p = 0; + goto drawit; + } else + break; + case SDLK_RETURN: case SDLK_ESCAPE: case SDLK_g: out:; *p = 0; ezsdl_clear(); return; + case SDLK_UP: + if(flags == INPUT_LOOP_RET) + goto out; + p_n = *(p - 1); + if(p_n < 48 || p_n > 57) p_n = 48; + if(p >= result && p_n < 57 && (p - result < 20)) { + if (p > result) p--; + p_n++; + *(p++) = p_n; + *p = 0; + goto drawit; + } else + break; + case SDLK_DOWN: + if(flags == INPUT_LOOP_RET) + goto out; + p_n = *(p - 1); + if(p_n < 48 || p_n > 57) p_n = 48; + if(p >= result && p_n >= 48 && (p - result < 20)) { + if (p_n == 48 ) p_n++; + if (p > result) p--; + p_n--; + *(p++) = p_n; + *p = 0; + goto drawit; + } else + break; default: if(flags == INPUT_LOOP_RET) goto out; - else if(flags == INPUT_LOOP_NUMERIC && isdigit(event.which) && (p - result < 20)) { - *(p++) = event.which; + else if(flags == INPUT_LOOP_NUMERIC && (p - result < 20)) { + if(isdigit(event.which)) *(p++) = event.which; + else if (event.which == 275) *(p++) = 48; *p = 0; } drawit: @@ -865,7 +907,7 @@ int main(int argc, char **argv) { { char buf[32]; buf[0] = 0; - input_loop("enter page no", buf, INPUT_LOOP_NUMERIC); + input_loop("Enter page No.: (use number/arrow keys)", buf, INPUT_LOOP_NUMERIC); if(*buf) need_redraw = set_page(atoi(buf)); else need_redraw = 1; } -- 2.34.1