You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

77 lines
1.9 KiB
Zig

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);
}