use fmt; use fs; use getopt; use io; use os; use strconv; use gpt; use mbr; use cmd; export fn create(args: []str) void = { // XXX this is a stub const c = getopt::parse(args, ('f', "file", "specify another partition file to fit"), ('b', "bytes", "specify another length margin (bytes)"), ('s', "sectors", "specify another length margin (sectors, 512 bytes)") ); defer getopt::finish(&c); let length = 0z; for (let i = 0z; i < len(c.opts); i += 1) { const opt = c.opts[i]; switch (opt.0) { case 'l' => length += (strconv::stoi(opt.1)! / 512 + 1): size; case 's' => length += strconv::stoi(opt.1)!: size; case 'f' => const stat = os::stat(opt.1)!; length += stat.sz / 512 + 1; }; }; const fd = cmd::mkfile(); defer io::close(fd)!; const vol = gpt::create(fd, length); defer { gpt::chksums(vol); gpt::commit(vol)!; gpt::finish(vol); }; vol.mbr.entries[3] = mbr::entry { part_type = 0xEE, lba_begin = 0, length = -1: u32, ... }; };