diff options
author | Lassi Pulkkinen <lassi@pulk.fi> | 2024-10-31 03:11:21 +0200 |
---|---|---|
committer | Lassi Pulkkinen <lassi@pulk.fi> | 2024-10-31 03:51:35 +0200 |
commit | ae44478b30d890fe0fb04022f44d474dcdcc3f9d (patch) | |
tree | 5f462459ae4b47d22114eed717d1382d08cf4dfe /main.ha |
Diffstat (limited to 'main.ha')
-rw-r--r-- | main.ha | 60 |
1 files changed, 60 insertions, 0 deletions
@@ -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); +}; |