From db76fe7805e0e3308eb217d1e3ea26dfd7a53e68 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Mon, 8 Mar 2010 17:27:42 +0000 Subject: add getopt, usage --- bf.c | 42 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/bf.c b/bf.c index 6689c19..7f7e030 100644 --- a/bf.c +++ b/bf.c @@ -16,6 +16,7 @@ */ #include +#include #include #include #include @@ -81,7 +82,8 @@ readprog(char *fname) int ch; fd = fopen(fname, "r"); - assert(fd); + if (!fd) + return NULL; fseek(fd, 0L, SEEK_END); len = ftell(fd); @@ -100,17 +102,47 @@ readprog(char *fname) return prog; } +void +usage(void) +{ + extern char *__progname; + + fprintf(stderr, "usage: %s [-d] \n", __progname); + + exit(1); +} + int main(int argc, char **argv) { Cell *data; char *prog, *p; + int dumpflag = 0; int loop; + int c; - if (argc != 2) + while ((c = getopt(argc, argv, "dh")) != -1) + switch (c) { + case 'd': + dumpflag = 1; + break; + case 'h': + case '?': + default: + usage(); + /* NOTREACHED */ + } + + argc -= optind; + argv += optind; + + if (!argc) return -1; - prog = readprog(argv[1]); + prog = readprog(*argv); + if (!prog) + errx(1, "not found: %s", *argv); + data = alloccell(); for (p = prog; *p; p++) @@ -164,7 +196,9 @@ main(int argc, char **argv) break; } - dumpcells(data); + if (dumpflag) + dumpcells(data); + freecells(data); free(prog); -- cgit v1.2.3