short options may now be combined. (-xvf style)
[swftools.git] / lib / args.h
index 0e99360..551623e 100644 (file)
@@ -15,8 +15,8 @@ extern int args_callback_longoption(char*,char*);
 extern int args_callback_command(char*,char*);
 extern void args_callback_usage(char*name);
 
-int argn;
-char**argv;
+//int argn;
+//char**argv;
 
 void processargs(int argn2,char**argv2)
 {
@@ -50,7 +50,28 @@ void processargs(int argn2,char**argv2)
                    args_callback_usage(argv2[0]);
                    exit(1);
                }
-               t+=args_callback_option(&argv2[t][1],next);
+               if(argv2[t][1]) // this might be something like e.g. -xvf
+               {
+                   char buf[2];
+                   buf[1]=0;
+                   int s=1;
+                   int ret;
+                   do{
+                       if(argv2[t][s+1]) {
+                         buf[0] = argv2[t][s];
+                         ret = args_callback_option(buf,&argv2[t][s+1]);
+                       }
+                       else {
+                         t+= args_callback_option(&argv2[t][s], next);
+                         break;
+                       }
+                       s++;
+                   } while(!ret);
+               }
+               else // - usually means "read stdout"
+               {
+                   t+=args_callback_option(&argv2[t][1],next);
+               }
            }
        }
        else
@@ -66,7 +87,7 @@ struct options_t
     char*longoption;
 };
 
-int args_long2shortoption(options_t*options, char*name, char*val)
+int args_long2shortoption(struct options_t*options, char*name, char*val)
 {
     char*equal = strchr(name,'=');
     if (equal) {
@@ -79,7 +100,12 @@ int args_long2shortoption(options_t*options, char*name, char*val)
                        +(equal?strlen(equal)+2:2));
                strcpy(tmp, options->shortoption);
                if(equal) {
-                   strcpy(&tmp[strlen(tmp)], equal);
+                   //strcpy(&tmp[strlen(tmp)], equal);
+                   int ret = args_callback_option(tmp, equal);
+                   if(!ret) {
+                       fprintf(stderr, "Warning: Option --%s takes no parameter.\n", name);
+                   }
+                   return 0;
                }
                return args_callback_option(tmp,val);
        }