Cleaning up strings, officially add exit command.

This commit is contained in:
Lynn Leichtle 2024-09-18 22:06:24 +02:00
parent 1b51632360
commit 6c453709a5
Signed by: lynn
GPG key ID: 55E797F631DDA03C

View file

@ -24,22 +24,24 @@ const TOO_MANY_ARGUMENTS = "Wrong number of arguments";
const WRONG_ARGUMENT = "Invalid argument"; const WRONG_ARGUMENT = "Invalid argument";
// COMMAND // COMMAND
const PROMPT_COMMAND = "prompt"; const PROMPT_COMMAND = "prompt";
const SEGMENT_REGISTER_COMMAND = "sr"; const SEGMENT_REGISTER_COMMAND = "sreg";
const REGISTER_COMMAND = "reg"; const REGISTER_COMMAND = "reg";
const CLEAR_COMMAND = "cls"; const CLEAR_COMMAND = "cls";
const HELP_COMMAND = "?"; const HELP_COMMAND = "?";
const EXIT_COMMAND = "exit";
// DESCRIPTION // DESCRIPTION
const PROMPT_DESCRIPTION = "Change the prompt between Long-mode or Short-mode."; const PROMPT_DESCRIPTION = "Change the prompt between Long-mode or Short-mode.";
const REGISTER_DESCRIPTION = "Print the current values for Registers."; const REGISTER_DESCRIPTION = "Print the current values for Registers.";
const SEGMENT_REGISTER_DESCRIPTION = "Print the current values for Segment Registers."; const SEGMENT_REGISTER_DESCRIPTION = "Print the current values for Segment Registers.";
const CLEAR_DESCRIPTION = "Clears the screen."; const CLEAR_DESCRIPTION = "Clears the screen.";
const EXIT_DESCRIPTION = "Exits the REPL.";
// USAGE // USAGE
const PROMPT_USAGE = "prompt {short|long}"; const PROMPT_USAGE = "prompt {short|long}";
const REGISTER_USAGE = "reg"; const REGISTER_USAGE = REGISTER_COMMAND;
const SEGMENT_REGISTER_USAGE = "sr"; const SEGMENT_REGISTER_USAGE = SEGMENT_REGISTER_COMMAND;
const HELP_USAGE = "?"; const HELP_USAGE = HELP_COMMAND;
const CLEAR_USAGE = "cls"; const CLEAR_USAGE = CLEAR_COMMAND;
const EXIT_USAGE = EXIT_COMMAND;
pub fn main() !void { pub fn main() !void {
var memory = mem.Memory.init(); var memory = mem.Memory.init();
var cpu = cpu_.Cpu.init(); var cpu = cpu_.Cpu.init();
@ -59,10 +61,13 @@ pub fn main() !void {
\\ to redistribute it under certain coditions; \\ to redistribute it under certain coditions;
\\ for details please refer to the LICENSE file. \\ for details please refer to the LICENSE file.
\\ \\
\\Type `?` for help. \\Type `{s}` for help.
\\Type `exit` to quit. \\Type `{s}` to quit.
\\ \\
, .{}); , .{
HELP_COMMAND,
EXIT_COMMAND,
});
var buffer: [256]u8 = undefined; var buffer: [256]u8 = undefined;
while (true) { while (true) {
if (long_prompt) { if (long_prompt) {
@ -74,13 +79,13 @@ pub fn main() !void {
const clean = std.mem.trim(u8, line.?, " \n\r"); const clean = std.mem.trim(u8, line.?, " \n\r");
var it = std.mem.splitSequence(u8, clean, " "); var it = std.mem.splitSequence(u8, clean, " ");
if (it.next()) |first_argument| { if (it.next()) |first_argument| {
if (std.mem.eql(u8, first_argument, "exit")) { if (std.mem.eql(u8, first_argument, EXIT_COMMAND)) {
break; break;
} else if (std.mem.eql(u8, first_argument, "sr")) { } else if (std.mem.eql(u8, first_argument, SEGMENT_REGISTER_COMMAND)) {
try handleSegmentRegisterCommand(&cpu, &it); try handleSegmentRegisterCommand(&cpu, &it);
} else if (std.mem.eql(u8, first_argument, "prompt")) { } else if (std.mem.eql(u8, first_argument, PROMPT_COMMAND)) {
try handlePromptCommand(&it); try handlePromptCommand(&it);
} else if (std.mem.eql(u8, first_argument, "?")) { } else if (std.mem.eql(u8, first_argument, HELP_COMMAND)) {
try handleHelpCommand(&it); try handleHelpCommand(&it);
} else if (std.mem.eql(u8, first_argument, CLEAR_COMMAND)) { } else if (std.mem.eql(u8, first_argument, CLEAR_COMMAND)) {
try handleClearScreenCommand(&it); try handleClearScreenCommand(&it);
@ -151,12 +156,14 @@ fn handleHelpCommand(it: anytype) !void {
\\{s: <20} {s} \\{s: <20} {s}
\\{s: <20} {s} \\{s: <20} {s}
\\{s: <20} {s} \\{s: <20} {s}
\\{s: <20} {s}
\\ \\
, .{ , .{
PROMPT_USAGE, PROMPT_DESCRIPTION, PROMPT_USAGE, PROMPT_DESCRIPTION,
REGISTER_USAGE, REGISTER_DESCRIPTION, REGISTER_USAGE, REGISTER_DESCRIPTION,
SEGMENT_REGISTER_USAGE, SEGMENT_REGISTER_DESCRIPTION, SEGMENT_REGISTER_USAGE, SEGMENT_REGISTER_DESCRIPTION,
CLEAR_USAGE, CLEAR_DESCRIPTION, CLEAR_USAGE, CLEAR_DESCRIPTION,
EXIT_USAGE, EXIT_DESCRIPTION,
}); });
} }
} }