aboutsummaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
authorAndrew Chambers <[email protected]>2021-10-14 21:35:15 +1300
committerAndrew Chambers <[email protected]>2021-10-14 21:35:15 +1300
commiteefef08f5a465eefe1eaf3d86950af6f6c30ee46 (patch)
tree7d19c38f9288367286a9e6c25578dbb327a1c644 /main.c
parent9fad209177414598f40241f1b2f2c4034b587e2d (diff)
Use different style arg parsing.
Diffstat (limited to 'main.c')
-rw-r--r--main.c50
1 files changed, 30 insertions, 20 deletions
diff --git a/main.c b/main.c
index 64101d2..c3ebf98 100644
--- a/main.c
+++ b/main.c
@@ -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