dcpu16

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

commit a332d295d5974b77df34189a10b498db9c454664
parent 8af828b13792597e0c3e805ae03a09b263c22282
Author: Travis Geiselbrecht <geist@foobox.com>
Date:   Thu,  5 Apr 2012 23:51:28 -0700

assembler: getopt()ify the command line arguments

Diffstat:
Massembler.c | 56+++++++++++++++++++++++++++++++++++++++++++-------------
1 file changed, 43 insertions(+), 13 deletions(-)

diff --git a/assembler.c b/assembler.c @@ -37,6 +37,7 @@ #include <stdarg.h> #include <string.h> #include <ctype.h> +#include <getopt.h> typedef uint16_t u16; typedef uint32_t u32; @@ -359,24 +360,53 @@ void emit(const char *fn) { fclose(fp); } +static void usage(int argc, char **argv) +{ + fprintf(stderr, "usage: %s [-o output] <input file(s)>\n", argv[0]); +} + int main(int argc, char **argv) { const char *outfn = "out.hex"; - while (argc > 1) { - argc--; - argv++; - if (argv[0][0] == '-') { - if (!strcmp(argv[0],"-o")) { - if (argc > 1) { - outfn = argv[1]; - argc--; - argv++; - continue; - } - } - die("unknown option: %s", argv[0]); + for (;;) { + int c; + int option_index = 0; + + static struct option long_options[] = { + {"help", 0, 0, 'h'}, + {"output", 1, 0, 'o'}, + {0, 0, 0, 0}, + }; + + c = getopt_long(argc, argv, "ho:", long_options, &option_index); + if (c == -1) + break; + + switch (c) { + case 'h': + usage(argc, argv); + return 0; + case 'o': + outfn = optarg; + break; + default: + usage(argc, argv); + return 1; } + } + + if (argc - optind < 1) { + usage(argc, argv); + return 1; + } + + argc -= optind; + argv += optind; + + while (argc >= 1) { assemble(argv[0]); + argv++; + argc--; } if (PC != 0) {