diff options
author | Harry Jeffery <harry@exec64.co.uk> | 2015-11-13 20:40:17 +0000 |
---|---|---|
committer | Harry Jeffery <harry@exec64.co.uk> | 2015-11-13 20:40:17 +0000 |
commit | a22c50fc8074ab7733da90520295c4e8d0540b90 (patch) | |
tree | e75ad43fb63b077183423c7440988121cf3cecaf /src | |
parent | 8593ac9ab4f5cfbc48ea6579d44c991b155be124 (diff) | |
parent | 68668c3d740fb8ddf42661c75c06cc7123dba114 (diff) | |
download | imv-a22c50fc8074ab7733da90520295c4e8d0540b90.tar.gz |
Merge pull request #23 from autrimpo/master
parse options using getopt
Diffstat (limited to 'src')
-rw-r--r-- | src/main.c | 37 |
1 files changed, 22 insertions, 15 deletions
@@ -19,6 +19,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include <stddef.h> #include <SDL2/SDL.h> #include <FreeImage.h> +#include <getopt.h> #include "image.h" #include "texture.h" @@ -80,10 +81,16 @@ void print_usage(const char* name) , IMV_VERSION, name); } -void parse_arg(const char* name, const char* arg) +void parse_args(int argc, char** argv) { - for(const char *o = arg; *o != 0; ++o) { - switch(*o) { + /* Do not print getopt errors */ + opterr = 0; + + const char* name = argv[0]; + char o; + + while((o = getopt(argc, argv, "firah")) != -1) { + switch(o) { case 'f': g_options.fullscreen = 1; break; case 'i': g_options.stdin = 1; @@ -92,8 +99,8 @@ void parse_arg(const char* name, const char* arg) case 'r': g_options.recursive = 1; break; case 'a': g_options.actual = 1; break; case 'h': print_usage(name); exit(0); break; - default: - fprintf(stderr, "Unknown argument '%c'. Aborting.\n", *o); + case '?': + fprintf(stderr, "Unknown argument '%c'. Aborting.\n", optopt); exit(1); } } @@ -109,17 +116,17 @@ int main(int argc, char** argv) struct imv_navigator nav; imv_init_navigator(&nav); - for(int i = 1; i < argc; ++i) { - if(strcmp(argv[i], "-") == 0) { - g_options.stdin = 1; - } else if(argv[i][0] == '-') { - parse_arg(argv[0], &argv[i][1]); + parse_args(argc,argv); + + for(int i = optind; i < argc; ++i) { + if(!strcmp("-",argv[i])) { + g_options.stdin = 1; + continue; + } + if(g_options.recursive) { + imv_navigator_add_path_recursive(&nav, argv[i]); } else { - if(g_options.recursive) { - imv_navigator_add_path_recursive(&nav, argv[i]); - } else { - imv_navigator_add_path(&nav, argv[i]); - } + imv_navigator_add_path(&nav, argv[i]); } } |