if (iArg < argc)
{
psz = &(argv[iArg][0]);
if (*psz == '-' || *psz == '/')
{
/* we have an option specifier */
chOpt = argv[iArg][1];
if (isalnum(chOpt) || ispunct(chOpt))
{
/* we have an option character */
psz = strchr(pszValidOpts, chOpt);
if (psz != NULL)
{
/* option is valid, we want to return chOpt */
if (psz[1] == ':')
{
/* option can have a parameter */
psz = &(argv[iArg][2]);
if (*psz == '\0')
{
/* must look at next argv for param */
if (iArg+1 < argc)
{
psz = &(argv[iArg+1][0]);
if (*psz == '-' || *psz == '/')
{
/* next argv is a new option, so param */
/* not given for current option */
}
else
{
/* next argv is the param */
iArg++;
pszParam = psz;
}
}
else
{
/* reached end of args looking for param */
}
}
else
{
/* param is attached to option */
pszParam = psz;
}
}
else
{
/* option is alone, has no parameter */
}
}
else
{
/* option specified is not in list of valid options */
chOpt = -1;
pszParam = &(argv[iArg][0]);
}
}
else
{
/* though option specifier was given, option character */
/* is not alpha or was was not specified */
chOpt = -1;
pszParam = &(argv[iArg][0]);
}
}
else
{
/* standalone arg given with no option specifier */
chOpt = 1;
pszParam = &(argv[iArg][0]);
}
}
else
{
/* end of argument list */
chOpt = 0;
}