Cleaning up strings, officially add exit command.
This commit is contained in:
parent
1b51632360
commit
6c453709a5
1 changed files with 20 additions and 13 deletions
33
src/main.zig
33
src/main.zig
|
@ -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,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue