From ae44478b30d890fe0fb04022f44d474dcdcc3f9d Mon Sep 17 00:00:00 2001 From: Lassi Pulkkinen Date: Thu, 31 Oct 2024 03:11:21 +0200 Subject: Initial commit (import old repo) --- main.ha | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 main.ha (limited to 'main.ha') diff --git a/main.ha b/main.ha new file mode 100644 index 0000000..0b1737c --- /dev/null +++ b/main.ha @@ -0,0 +1,60 @@ +use fmt; +use getopt; +use io; +use net::dial; +use os; +use trace; +use unix::signal; + +const help: [_]getopt::help = [ + "minecraft client", + ('u', "name", "username for login"), + "addr", +]; + +export fn main() void = { + signal::ignore(signal::sig::PIPE); + dial::registersvc("tcp", "minecraft", [], 25565); + + let tracer = newtracer(os::stderr); + trace::setroot(&tracer); + defer trace::setroot(&trace::silent); + + const cmd = getopt::parse(os::args, help...); + defer getopt::finish(&cmd); + + let username = "Player"; + + for (let i = 0z; i < len(cmd.opts); i += 1) { + const (flag, param) = cmd.opts[i]; + + switch (flag) { + case 'u' => + username = param; + case => abort(); + }; + }; + + if (len(cmd.args) != 1) { + die_usage("expected exactly 1 positional argument"); + }; + const addr = cmd.args[0]; + + window_run(addr, username); +}; + +fn error(fmt: str, args: fmt::field...) void = { + fmt::errorf("{}: ", os::args[0]): void; + fmt::errorfln(fmt, args...): void; +}; + +fn die(fmt: str, args: fmt::field...) never = { + error(fmt, args...); + os::exit(1); +}; + +fn die_usage(fmt: str, args: fmt::field...) never = { + error(fmt, args...); + getopt::printusage(os::stderr, os::args[0], help)!; + os::exit(1); +}; -- cgit v1.2.3