Back to index

courier  0.68.2
argparse.c
Go to the documentation of this file.
00001 #include      "argparse.h"
00002 #include      <string.h>
00003 #include      <stdlib.h>
00004 #include      <stdio.h>
00005 
00006 /*
00007 ** Copyright 2000 Double Precision, Inc.
00008 ** See COPYING for distribution information.
00009 */
00010 
00011 
00012 
00013 int argparse(int argc, char **argv, struct args *s)
00014 {
00015 int    argn=1;
00016 int    i;
00017 
00018        while (argn < argc)
00019        {
00020        const char *p;
00021        int    l=0;
00022 
00023               if ( argv[argn][0] != '-')  break;
00024               if ( argv[argn][1] == 0)
00025               {
00026                      ++argn;
00027                      break;
00028               }
00029               for (i=0; s[i].name; i++)
00030               {
00031                      l=strlen(s[i].name);
00032                      if (strncmp(s[i].name, argv[argn]+1, l) == 0 &&
00033                             (argv[argn][l+1] == 0 ||
00034                             argv[argn][l+1] == '='))    break;
00035               }
00036               if (s[i].name == 0)
00037               {
00038                      fprintf(stderr, "%s: Invalid option: %s\n",
00039                             argv[0], argv[argn]);
00040                      exit(1);
00041               }
00042               p=argv[argn]+1+l;
00043               if (*p)       ++p;
00044               if (s[i].valuep)
00045                      *s[i].valuep=p;
00046               else
00047                      (*s[i].funcp)(p);
00048               ++argn;
00049        }
00050        return (argn);
00051 }