diff options
| author | Andrew Chambers <[email protected]> | 2021-10-14 21:35:15 +1300 |
|---|---|---|
| committer | Andrew Chambers <[email protected]> | 2021-10-14 21:35:15 +1300 |
| commit | eefef08f5a465eefe1eaf3d86950af6f6c30ee46 (patch) | |
| tree | 7d19c38f9288367286a9e6c25578dbb327a1c644 /main.c | |
| parent | 9fad209177414598f40241f1b2f2c4034b587e2d (diff) | |
Use different style arg parsing.
Diffstat (limited to 'main.c')
| -rw-r--r-- | main.c | 50 |
1 files changed, 30 insertions, 20 deletions
@@ -1201,43 +1201,53 @@ static void outelf(void) { } static void usage(char *argv0) { - fprintf(stderr, "usage: %s [-o OUT] [input]\n", argv0); + fprintf(stderr, "usage: %s [-o out] [input]\n", argv0); exit(2); } -int main(int argc, char *argv[]) { - - char *argv0, *outfname; +static void parseargs(int argc, char *argv[]) { + char *a, *argv0, *outfname; argv0 = argv[0]; - ARGBEGIN { - case 'o': - outfname = EARGF(usage(argv0)); - if (!freopen(outfname, "w", stdout)) - fatal("unable to open %s:", outfname); - break; - default: - usage(argv[0]); + for (++argv; *argv; argv++) { + if (argv[0][0] != '-') + break; + for (a = &argv[0][1]; *a; a++) { + switch (*a) { + case 'h': + usage(argv0); + break; + case 'o': + if (argv[1] == NULL) + usage(argv0); + outfname = *++argv; + if (!freopen(outfname, "w", stdout)) + fatal("unable to open %s:", outfname); + break; + default: + usage(argv0); + } + } } - ARGEND - - if (argc >= 2) - usage(argv0); - if (argc == 1) { - infilename = argv[argc - 1]; + if (argv[0]) { + if (argv[1]) + usage(argv0); + infilename = argv[0]; if (!freopen(infilename, "r", stdin)) fatal("unable to open %s:", infilename); } +} +int main(int argc, char *argv[]) { symbols = mkhtab(256); - allasm = parse(); + parseargs(argc, argv); + allasm = parseasm(); initsections(); assemble(); fillsymtab(); handlerelocs(); outelf(); - return 0; }
\ No newline at end of file |
