Logo Search packages:      
Sourcecode: ncftp2 version File versions  Download package

Getopt.c

/* Getopt.c */

#include "Sys.h"
#include "Util.h"
#include "Getopt.h"

int gOptErr = 1;                          /* if error message should be printed */
int gOptInd = 1;                          /* index into parent argv vector */
int gOptOpt;                                    /* character checked for validity */
char *gOptArg;                                  /* argument associated with option */
char *gOptPlace = kGetoptErrMsg;    /* saved position in an arg */

/* This must be called before each Getopt. */
void GetoptReset(void)
{
      gOptInd = 1;
      gOptPlace = kGetoptErrMsg;
}     /* GetoptReset */




static
char *NextOption(char *ostr)
{
      if ((gOptOpt = (int) *gOptPlace++) == (int) ':')
            return 0;
      return strchr(ostr, gOptOpt);
}     /* NextOption */




int Getopt(int nargc, char **nargv, char *ostr)
{
      register char *oli;                          /* Option letter list index */

      if (!*gOptPlace) {                                 /* update scanning pointer */
            if (gOptInd >= nargc || *(gOptPlace = nargv[gOptInd]) != '-')
                  return (EOF);
            if (gOptPlace[1] && *++gOptPlace == '-') {      /* found "--" */
                  ++gOptInd;
                  return (EOF);
            }
      }                                                  /* Option letter okay? */
      oli = NextOption(ostr);
      if (oli == NULL) {
            if (!*gOptPlace)
                  ++gOptInd;
            if (gOptErr)
                  PrintF("%s%s%c\n", *nargv, ": illegal option -- ", gOptOpt);
            return(kGetoptBadChar);
      }
      if (*++oli != ':') {                   /* don't need argument */
            gOptArg = NULL;
            if (!*gOptPlace)
                  ++gOptInd;
      } else {                                     /* need an argument */
            if (*gOptPlace)                              /* no white space */
                  gOptArg = gOptPlace;
            else if (nargc <= ++gOptInd) {  /* no arg */
                  gOptPlace = kGetoptErrMsg;
                  if (gOptErr) 
                        PrintF("%s%s%c\n", *nargv, ": option requires an argument -- ", gOptOpt);
                  return(kGetoptBadChar);
            } else                                       /* white space */
                  gOptArg = nargv[gOptInd];
            gOptPlace = kGetoptErrMsg;
            ++gOptInd;
      }
      return (gOptOpt);                      /* dump back Option letter */
}                                                        /* Getopt */

/* eof */

Generated by  Doxygen 1.6.0   Back to index