From 462684dc24a1969765c1918d170b8f265e840de5 Mon Sep 17 00:00:00 2001 From: Fernando Date: Tue, 26 Jul 2022 14:07:50 -0300 Subject: [PATCH] View history --- Build/PTM.exe | Bin 601088 -> 601088 bytes Build/test.ptml | 1 + PTM/t_command.cpp | 17 ++++++++++++----- PTM/t_command.h | 3 ++- PTM/t_compiler.cpp | 17 ++++++++++++----- PTM/t_interpreter.cpp | 4 +++- PTM/t_machine.h | 1 + PTM/t_program_editor.cpp | 4 ++-- 8 files changed, 33 insertions(+), 14 deletions(-) diff --git a/Build/PTM.exe b/Build/PTM.exe index 9493ad641143d072035345555a48830c4c84b5f3..ead6df47e48bfb039b14baa7b42c517d336c5be1 100644 GIT binary patch delta 26975 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 Y#|M|Erg!(fs6Ur1J4W{KeYMm70qN^BGXMYp delta 26213 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 z$*-r>q|~Lwnd->SetBackColor(machine->pal->GetColorRGB(intp->require_number(arg[0]))); } -void t_command::set_tile_transparency(t_params& arg) { - ARGC(1); - int value = intp->require_number(arg[0]); - machine->tile_transparency = value > 0; +void t_command::set_tile_transparency(t_params& arg, bool transparent) { + ARGC(0); + machine->tile_transparency = transparent; } void t_command::select_layer(t_params& arg) { ARGC(1); @@ -727,3 +729,8 @@ void t_command::increment_variable(t_params& arg) { auto& var = machine->vars[arr_id]; machine->vars[arr_id] = String::ToString(String::ToInt(var.value) + 1); } + +void t_command::allow_exit_on_escape_key(t_params& arg, bool allow) { + ARGC(0); + machine->exit_key = allow ? SDLK_ESCAPE : 0; +} diff --git a/PTM/t_command.h b/PTM/t_command.h index 2a046ff3..8e38ee56 100644 --- a/PTM/t_command.h +++ b/PTM/t_command.h @@ -40,7 +40,7 @@ struct t_command { void clear_layer(t_params& arg); void clear_rect(t_params& arg); void set_wnd_bgcolor(t_params& arg); - void set_tile_transparency(t_params& arg); + void set_tile_transparency(t_params& arg, bool transparent); void select_layer(t_params& arg); void define_char(t_params& arg); void define_color(t_params& arg); @@ -79,4 +79,5 @@ struct t_command { void clear_array(t_params& arg); void copy_array(t_params& arg); void increment_variable(t_params& arg); + void allow_exit_on_escape_key(t_params& arg, bool allow); }; diff --git a/PTM/t_compiler.cpp b/PTM/t_compiler.cpp index 368ba295..0b4ede8e 100644 --- a/PTM/t_compiler.cpp +++ b/PTM/t_compiler.cpp @@ -7,9 +7,9 @@ void t_compiler::run(t_program* prg) { prg->lines.clear(); prg->labels.clear(); int src_line_nr = 1; - for (auto& srcline : prg->src_lines) { + for (auto& src_line : prg->src_lines) { t_program_line new_line; - bool must_add_line = compile(prg, &new_line, srcline, src_line_nr); + bool must_add_line = compile(prg, &new_line, src_line, src_line_nr); if (must_add_line) { prg->lines.push_back(new_line); } @@ -17,14 +17,21 @@ void t_compiler::run(t_program* prg) { } } bool t_compiler::compile(t_program* prg, t_program_line* new_line, string src_line, int src_line_nr) { - int line_ix = prg->lines.size(); + if (String::StartsWith(src_line, ' ')) { + add_error(src_line_nr, src_line, "Leading whitespace is not allowed"); + return false; + } src_line = String::Trim(src_line); if (String::StartsWith(src_line, ';')) { return false; } if (String::StartsWith(src_line, ":")) { string label = String::Trim(String::Skip(src_line, 1)); - prg->labels[label] = line_ix; + prg->labels[label] = prg->lines.size(); + return false; + } + if (!src_line.empty() && !String::StartsWithLetter(src_line)) { + add_error(src_line_nr, src_line, "Syntax error"); return false; } new_line->src = src_line; @@ -118,6 +125,6 @@ bool t_compiler::compile(t_program* prg, t_program_line* new_line, string src_li return true; } void t_compiler::add_error(int line, string src, string msg) { - errors.push_back(String::Format("At line %i:\n%s\n\n%s", + errors.push_back(String::Format("COMPILATION ERROR\nAt line %i:\n%s\n\n%s", line, msg.c_str(), src.c_str())); } diff --git a/PTM/t_interpreter.cpp b/PTM/t_interpreter.cpp index 9d143ae5..5bf42d8a 100644 --- a/PTM/t_interpreter.cpp +++ b/PTM/t_interpreter.cpp @@ -71,6 +71,8 @@ void t_interpreter::execute_current_line() { void t_interpreter::on_keydown(SDL_Keycode key, bool ctrl, bool shift, bool alt) { if (key == SDLK_RETURN && TKey::Alt()) { wnd->ToggleFullscreen(); + } else if (machine->exit_key != 0 && key == machine->exit_key) { + running = false; } else { machine->last_key_pressed = key; } @@ -78,7 +80,7 @@ void t_interpreter::on_keydown(SDL_Keycode key, bool ctrl, bool shift, bool alt) void t_interpreter::abort(string error) { running = false; if (cur_line) { - errors.push_back(String::Format("At line %i:\n%s\n\n%s", + errors.push_back(String::Format("RUNTIME ERROR\nAt line %i:\n%s\n\n%s", cur_line->src_line_nr, error.c_str(), cur_line->src.c_str())); } else { errors.push_back(error); diff --git a/PTM/t_machine.h b/PTM/t_machine.h index 5025df49..344aabdf 100644 --- a/PTM/t_machine.h +++ b/PTM/t_machine.h @@ -25,6 +25,7 @@ struct t_machine { } text_color; // Input SDL_Keycode last_key_pressed = 0; + SDL_Keycode exit_key = 0; // Sound TSound* snd = nullptr; // Comparisons diff --git a/PTM/t_program_editor.cpp b/PTM/t_program_editor.cpp index e0d8d818..1ff079db 100644 --- a/PTM/t_program_editor.cpp +++ b/PTM/t_program_editor.cpp @@ -390,9 +390,9 @@ void t_program_editor::compile_and_run() { void t_program_editor::print_errors(std::vector& errors) { snd->Beep(2500, 100); string error = errors[0]; - while (running) { + while (running || !cfg->autorun.empty()) { draw_screen_base(); - print_border_top("RUNTIME ERROR", 0); + print_border_top("PTM", 0); if (cfg->autorun.empty()) { print_border_bottom("Press ENTER to continue...", 0); } else {