Basic Image AlgorithmS Library  2.8.0
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
getopt_W32.cpp
1 // must be first:
2 //#include <precompiled.h>
3 
4 /*
5 * Copyright (c) 1987, 1993, 1994
6 * The Regents of the University of California. All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
16 * 3. All advertising materials mentioning features or use of this software
17 * must display the following acknowledgement:
18 * This product includes software developed by the University of
19 * California, Berkeley and its contributors.
20 * 4. Neither the name of the University nor the names of its contributors
21 * may be used to endorse or promote products derived from this software
22 * without specific prior written permission.
23 *
24 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
25 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 * SUCH DAMAGE.
35 */
36 
37 //#include <bias_config.h>
38 
39 #include "getopt_W32.h"
40 #include <stdio.h>
41 #include <stdlib.h>
42 #include <string.h>
43 
44 // DLL (JW)
45 
46 BIASCommon_EXPORT int opterr = 1; /* if error message should be printed */
47 BIASCommon_EXPORT int optind = 1; /* index into parent argv vector */
48 BIASCommon_EXPORT int optopt; /* character checked for validity */
49 BIASCommon_EXPORT int optreset; /* reset getopt */
50 BIASCommon_EXPORT char * optarg; /* argument associated with option */
51 
52 #define BADCH (int)'?'
53 #define BADARG (int)':'
54 #define EMSG ""
55 
56 /*
57 * getopt --
58 * Parse argc/argv argument vector.
59 */
60 int
61 getopt(int nargc,
62  char * const *nargv,
63  const char *ostr )
64 {
65  static char *place = EMSG; /* option letter processing */
66  char *oli; /* option letter list index */
67 
68  if (optreset || !*place) { /* update scanning pointer */
69  optreset = 0;
70  if (optind >= nargc || *(place = nargv[optind]) != '-') {
71  place = EMSG;
72  return (-1);
73  }
74  if (place[1] && *++place == '-') { /* found "--" */
75  ++optind;
76  place = EMSG;
77  return (-1);
78  }
79  }
80  /* option letter okay? */
81  optopt = (int)*place;
82  place++;
83  oli = (char*)strchr(ostr, optopt);
84  if (optopt == (int)':' ||
85  !oli )
86  {
87  /*
88  * if the user didn't specify '-' as an option,
89  * assume it means -1.
90  */
91  if (optopt == (int)'-')
92  return (-1);
93  if (!*place)
94  ++optind;
95  if (opterr && *ostr != ':' && optopt != BADCH)
96  (void)fprintf(stderr, "%s: illegal option -- %c\n",
97  "progname", optopt);
98  return (BADCH);
99  }
100  if (*++oli != ':') { /* don't need argument */
101  optarg = NULL;
102  if (!*place)
103  ++optind;
104  }
105  else { /* need an argument */
106  if (*place) /* no white space */
107  optarg = place;
108  else if (nargc <= ++optind) { /* no arg */
109  place = EMSG;
110  if (*ostr == ':')
111  return (BADARG);
112  if (opterr)
113  (void)fprintf(stderr,
114  "%s: option requires an argument -- %c\n",
115  "progname", optopt);
116  return (BADCH);
117  }
118  else /* white space */
119  optarg = nargv[optind];
120  place = EMSG;
121  ++optind;
122  }
123  return (optopt); /* dump back option letter */
124 }