This is Unofficial EPICS BASE Doxygen Site
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
epicsGetopt.c
Go to the documentation of this file.
1
#ifndef _MINGW
2
3
/*
4
* Copyright (c) 1987, 1993, 1994
5
* The Regents of the University of California. All rights reserved.
6
*
7
* Redistribution and use in source and binary forms, with or without
8
* modification, are permitted provided that the following conditions
9
* are met:
10
* 1. Redistributions of source code must retain the above copyright
11
* notice, this list of conditions and the following disclaimer.
12
* 2. Redistributions in binary form must reproduce the above copyright
13
* notice, this list of conditions and the following disclaimer in the
14
* documentation and/or other materials provided with the distribution.
15
* 3. All advertising materials mentioning features or use of this software
16
* must display the following acknowledgement:
17
* This product includes software developed by the University of
18
* California, Berkeley and its contributors.
19
* 4. Neither the name of the University nor the names of its contributors
20
* may be used to endorse or promote products derived from this software
21
* without specific prior written permission.
22
*
23
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
24
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
27
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33
* SUCH DAMAGE.
34
*/
35
36
#if defined(LIBC_SCCS) && !defined(lint)
37
static
char
sccsid[] =
"@(#)getopt.c 8.3 (Berkeley) 4/27/95"
;
38
#endif
/* LIBC_SCCS and not lint */
39
40
#include <stdio.h>
41
#include <stdlib.h>
42
#include <string.h>
43
44
#include <
epicsGetopt.h
>
45
46
#define _getprogname() nargv[0]
47
48
49
int
opterr
= 1,
/* if error message should be printed */
50
optind
= 1,
/* index into parent argv vector */
51
optopt
;
/* character checked for validity */
52
int
optreset
;
/* reset getopt */
53
54
55
char
*
optarg
;
/* argument associated with option */
56
57
#define BADCH (int)'?'
58
#define BADARG (int)':'
59
#define EMSG ""
60
61
/*
62
* getopt --
63
* Parse argc/argv argument vector.
64
*/
65
int
getopt
(nargc, nargv, ostr)
66
int nargc;
67
char
* const *nargv;
68
const
char
*ostr;
69
{
70
static
char
*place =
EMSG
;
/* option letter processing */
71
char
*oli;
/* option letter list index */
72
73
if
(
optreset
|| !*place) {
/* update scanning pointer */
74
optreset
= 0;
75
if
(
optind
>= nargc || *(place = nargv[
optind
]) !=
'-'
) {
76
place =
EMSG
;
77
return
(-1);
78
}
79
if
(place[1] && *++place ==
'-'
) {
/* found "--" */
80
++
optind
;
81
place =
EMSG
;
82
return
(-1);
83
}
84
}
/* option letter okay? */
85
if
((
optopt
= (
int
)*place++) == (
int
)
':'
||
86
!(oli = strchr(ostr,
optopt
))) {
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
_getprogname
(),
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
_getprogname
(),
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
}
125
126
#endif
/* !_MINGW */
getopt
int getopt(int nargc, char *const *nargv, const char *ostr)
Definition:
epicsGetopt.c:65
optind
int optind
Definition:
epicsGetopt.c:50
EMSG
#define EMSG
Definition:
epicsGetopt.c:59
NULL
#define NULL
Definition:
catime.c:38
optopt
int optopt
Definition:
epicsGetopt.c:50
opterr
int opterr
Definition:
epicsGetopt.c:49
_getprogname
#define _getprogname()
Definition:
epicsGetopt.c:46
BADCH
#define BADCH
Definition:
epicsGetopt.c:57
epicsGetopt.h
optreset
int optreset
Definition:
epicsGetopt.c:52
stderr
#define stderr
Definition:
epicsStdio.h:32
BADARG
#define BADARG
Definition:
epicsGetopt.c:58
optarg
char * optarg
Definition:
epicsGetopt.c:55
modules
libcom
src
osi
os
WIN32
epicsGetopt.c
Generated by
1.8.11