#include #include #include #include #include #include "io/read_file.h" #include "util/option.h" static const char *usage_string = "Gebruik: %s [OPTIES]...\n" "\n" "Toon systeem informatie\n" "\n" " -a Toon alle informatie\n" " -s Toon kernnaam\n" " -n Toon netwerk knooppunt gastheernaam\n" " -r Toon kernuitgave\n" " -v Toon kernversie\n" " -m Toon machine harde-goederen-naam\n" " -h Toon deze hulptekst\n" " -V Toon versienummer\n"; struct options { bool print_all; bool print_sysname; bool print_nodename; bool print_release; bool print_version; bool print_machine; }; static void parse_options(int argc, char **argv, struct options *opts) { const struct option_spec spec[] = { {'a', OPTION_SETBOOL(&opts->print_all)}, {'s', OPTION_SETBOOL(&opts->print_sysname)}, {'n', OPTION_SETBOOL(&opts->print_nodename)}, {'r', OPTION_SETBOOL(&opts->print_release)}, {'v', OPTION_SETBOOL(&opts->print_version)}, {'m', OPTION_SETBOOL(&opts->print_machine)}, {'h', OPTION_HELPUSAGE(usage_string)}, {'V', OPTION_VERSION()}, OPTION_SPEC_END }; option_parse(argc, argv, spec); } int entry_unaam(int argc, char **argv) { struct options opts = {0}; parse_options(argc, argv, &opts); if (opts.print_all == false && opts.print_sysname == false && opts.print_nodename == false && opts.print_release == false && opts.print_version == false && opts.print_machine == false) { opts.print_sysname = true; } struct utsname name; uname(&name); // can't fail bool first = true; #define PRINT(typ) \ if (opts.print_all || opts.print_ ## typ) { \ printf("%s%s", first ? "" : " ", name.typ); \ first = false; \ } PRINT(sysname); PRINT(nodename); PRINT(release); PRINT(version); PRINT(machine); printf("\n"); return 0; }