#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;
{
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;
}
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 {