aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHarry Jeffery <harry@exec64.co.uk>2015-11-13 20:40:17 +0000
committerHarry Jeffery <harry@exec64.co.uk>2015-11-13 20:40:17 +0000
commita22c50fc8074ab7733da90520295c4e8d0540b90 (patch)
treee75ad43fb63b077183423c7440988121cf3cecaf /src
parent8593ac9ab4f5cfbc48ea6579d44c991b155be124 (diff)
parent68668c3d740fb8ddf42661c75c06cc7123dba114 (diff)
downloadimv-a22c50fc8074ab7733da90520295c4e8d0540b90.tar.gz
Merge pull request #23 from autrimpo/master
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 67bdd33..002a3ec 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,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]);
}
}