aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichal Koutenský <koutak.m@gmail.com>2015-11-12 20:39:33 +0100
committerMichal Koutenský <koutak.m@gmail.com>2015-11-12 20:43:08 +0100
commit82e684b8103172cf41a88b01800147fe88f2c33d (patch)
tree0d6023a001764d3b24568538ac1af90fc6a26f59 /src
parentba6d0c7867707e7041172eed7684d197689f58eb (diff)
downloadimv-82e684b8103172cf41a88b01800147fe88f2c33d.tar.gz
parse options using getopt
Diffstat (limited to 'src')
-rw-r--r--src/main.c37
1 files changed, 22 insertions, 15 deletions
diff --git a/src/main.c b/src/main.c
index 950b0ff..f0c3a9f 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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,11 +99,15 @@ 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);
}
}
+
+ if(optind<argc && !strcmp("-",argv[optind])){
+ g_options.stdin = 1;
+ }
}
int main(int argc, char** argv)
@@ -109,17 +120,13 @@ 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(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]);
}
}