From 755798450bd0ed6ca319021e4e98bafc64b270cd Mon Sep 17 00:00:00 2001 From: rexim Date: Sun, 22 Dec 2019 01:13:12 +0700 Subject: [PATCH] Replace Tokens with Strings --- src/system/s.h | 17 +++++++++++++ src/ui/console.c | 66 ++++++------------------------------------------ 2 files changed, 25 insertions(+), 58 deletions(-) diff --git a/src/system/s.h b/src/system/s.h index f79ae001..2b3c3566 100644 --- a/src/system/s.h +++ b/src/system/s.h @@ -89,4 +89,21 @@ String trim(String input) return trim_end(trim_begin(input)); } +static inline +String chop_word(String *input) +{ + trace_assert(input); + + *input = trim_begin(*input); + + size_t i = 0; + while (i < input->count && !isspace(input->data[i])) + i++; + + String result = string(i, input->data); + input->data += i; + input->count -= i; + return result; +} + #endif // S_H_ diff --git a/src/ui/console.c b/src/ui/console.c index 90918956..9b1458c4 100644 --- a/src/ui/console.c +++ b/src/ui/console.c @@ -32,56 +32,6 @@ #define CONSOLE_FOREGROUND (rgba(0.80f, 0.80f, 0.80f, CONSOLE_ALPHA)) #define CONSOLE_ERROR (rgba(0.80f, 0.50f, 0.50f, CONSOLE_ALPHA)) -typedef struct { - const char *begin; - const char *end; -} Token; - - -static inline -Token token(const char *begin, const char *end) -{ - Token t = {begin, end}; - return t; -} - -static inline -int token_equals_str(Token t, const char *s) -{ - trace_assert(t.begin <= t.end); - size_t n1 = (size_t) (t.end - t.begin); - size_t n2 = strlen(s); - if (n1 != n2) return 0; - return memcmp(t.begin, s, n1) == 0; -} - -static inline -Token token_nt(const char *s) -{ - return token(s, s + strlen(s)); -} - -static inline -void ltrim(Token *t) -{ - while (t->begin < t->end && isspace(*t->begin)) { - t->begin++; - } -} - -static inline -Token chop_word(Token *t) -{ - ltrim(t); - const char *end = t->begin; - while (end < t->end && !isspace(*end)) { - end++; - } - Token result = token(t->begin, end); - t->begin = end; - return result; -} - struct Console { Lt *lt; @@ -146,10 +96,10 @@ static int console_eval_input(Console *console) { const char *input_text = edit_field_as_text(console->edit_field); - Token input = token_nt(input_text); - Token command = chop_word(&input); + String input = string_nt(input_text); + String command = chop_word(&input); - if (token_equals_str(command, "")) { + if (string_equal(command, STRING_LIT(""))) { edit_field_clean(console->edit_field); return 0; } @@ -162,18 +112,18 @@ static int console_eval_input(Console *console) return -1; } - if (token_equals_str(command, "load")) { - Token level = chop_word(&input); + if (string_equal(command, STRING_LIT("load"))) { + String level = chop_word(&input); console_log_push_line(console->console_log, "Loading level:", NULL, CONSOLE_FOREGROUND); - console_log_push_line(console->console_log, level.begin, level.end, CONSOLE_FOREGROUND); + console_log_push_line(console->console_log, level.data, level.data + level.count, CONSOLE_FOREGROUND); char level_name[256]; memset(level_name, 0, 256); - memcpy(level_name, level.begin, min_size_t((size_t)(level.end - level.begin), 255)); + memcpy(level_name, level.data, min_size_t(level.count, 255)); if (game_load_level(console->game, level_name) < 0) { console_log_push_line(console->console_log, "Could not load level", NULL, CONSOLE_ERROR); } - } else if (token_equals_str(command, "menu")) { + } else if (string_equal(command, STRING_LIT("menu"))) { console_log_push_line(console->console_log, "Loading menu", NULL, CONSOLE_FOREGROUND); game_switch_state(console->game, GAME_STATE_LEVEL_PICKER); } else { -- 2.44.0