const std = @import("std"); const io = std.io; const mem = std.mem; const os = std.os; var player1Name: []const u8 = undefined; var player2Name: []const u8 = undefined; pub fn main() anyerror!void { std.log.info("All your codebase are belong to us.", .{}); //Get input const stdIn = io.getStdIn(); const stdOut = io.getStdOut(); var quit: bool = false; var buffer: [1000]u8 = undefined; // var fba = std.heap.FixedBufferAllocator.init(&buffer); // const allocator = fba.allocator(); try stdOut.writer().print(">", .{}); while (!quit) { const input = (try nextLine(stdIn.reader(), &buffer)).?; try parser(input); try stdOut.writer().print(">", .{}); } } fn nextLine(reader: anytype, buffer: []u8) !?[]const u8 { var line = (try reader.readUntilDelimiterOrEof( buffer, '\n', )) orelse return null; // trim annoying windows-only carriage return character if (@import("builtin").os.tag == .windows) { return std.mem.trimRight(u8, line, "\r"); } else { return line; } } //TODO: Create command parser fn parser(query: []const u8) !void { const stdOut = io.getStdOut(); if (mem.eql(u8, query, "quit")) { try quitApp(); } if (mem.eql(u8, query, "player1")) { player1Name = try getInput(); try stdOut.writer().print("Player 1 is now {s}\n", .{player1Name}); } if (mem.eql(u8, query, "player2")) { player1Name = try getInput(); try stdOut.writer().print("Player 1 is now {s}\n", .{player1Name}); } } fn quitApp() !void { const stdOut = io.getStdOut(); try stdOut.writer().print("Bye!\n", .{}); os.exit(0); } fn getInput() ![]const u8{ const stdIn = io.getStdIn(); var buffer: [1000]u8 = undefined; const input = (try nextLine(stdIn.reader(), &buffer)).?; return input; } //TODO: Create inital settings test "basic test" { try std.testing.expectEqual(10, 3 + 7); }