/normxcorr/trunk

To get this branch, use:
bzr branch http://suren.me/webbzr/normxcorr/trunk

« back to all changes in this revision

Viewing changes to dict_hw/src/win/getopt.c

  • Committer: Suren A. Chilingaryan
  • Date: 2010-04-17 07:43:38 UTC
  • Revision ID: csa@dside.dyndns.org-20100417074338-l45lxndn5tv72bpx
Patches for windows port

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*      $NetBSD: getopt.c,v 1.16 1999/12/02 13:15:56 kleink Exp $       */
 
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 0
 
37
static char sccsid[] = "@(#)getopt.c    8.3 (Berkeley) 4/27/95";
 
38
#endif
 
39
 
 
40
#include <assert.h>
 
41
#include <errno.h>
 
42
#include <stdio.h>
 
43
#include <string.h>
 
44
 
 
45
#define __P(x) x
 
46
#define _DIAGASSERT(x) assert(x)
 
47
 
 
48
#ifdef __weak_alias
 
49
__weak_alias(getopt,_getopt);
 
50
#endif
 
51
 
 
52
 
 
53
int     opterr = 1,             /* if error message should be printed */
 
54
        optind = 1,             /* index into parent argv vector */
 
55
        optopt,                 /* character checked for validity */
 
56
        optreset;               /* reset getopt */
 
57
char    *optarg;                /* argument associated with option */
 
58
 
 
59
static char * _progname __P((char *));
 
60
int getopt_internal __P((int, char * const *, const char *));
 
61
 
 
62
static char *
 
63
_progname(nargv0)
 
64
        char * nargv0;
 
65
{
 
66
        char * tmp;
 
67
 
 
68
        _DIAGASSERT(nargv0 != NULL);
 
69
 
 
70
        tmp = strrchr(nargv0, '/');
 
71
        if (tmp)
 
72
                tmp++;
 
73
        else
 
74
                tmp = nargv0;
 
75
        return(tmp);
 
76
}
 
77
 
 
78
#define BADCH   (int)'?'
 
79
#define BADARG  (int)':'
 
80
#define EMSG    ""
 
81
 
 
82
/*
 
83
 * getopt --
 
84
 *      Parse argc/argv argument vector.
 
85
 */
 
86
int
 
87
getopt(nargc, nargv, ostr)
 
88
        int nargc;
 
89
        char * const nargv[];
 
90
        const char *ostr;
 
91
{
 
92
        static char *__progname = 0;
 
93
        static char *place = EMSG;              /* option letter processing */
 
94
        char *oli;                              /* option letter list index */
 
95
        __progname = __progname?__progname:_progname(*nargv);
 
96
 
 
97
        _DIAGASSERT(nargv != NULL);
 
98
        _DIAGASSERT(ostr != NULL);
 
99
 
 
100
        if (optreset || !*place) {              /* update scanning pointer */
 
101
                optreset = 0;
 
102
                if (optind >= nargc || *(place = nargv[optind]) != '-') {
 
103
                        place = EMSG;
 
104
                        return (-1);
 
105
                }
 
106
                if (place[1] && *++place == '-' /* found "--" */
 
107
                    && place[1] == '\0') {
 
108
                        ++optind;
 
109
                        place = EMSG;
 
110
                        return (-1);
 
111
                }
 
112
        }                                       /* option letter okay? */
 
113
        if ((optopt = (int)*place++) == (int)':' ||
 
114
            !(oli = strchr(ostr, optopt))) {
 
115
                /*
 
116
                 * if the user didn't specify '-' as an option,
 
117
                 * assume it means -1.
 
118
                 */
 
119
                if (optopt == (int)'-')
 
120
                        return (-1);
 
121
                if (!*place)
 
122
                        ++optind;
 
123
                if (opterr && *ostr != ':')
 
124
                        (void)fprintf(stderr,
 
125
                            "%s: illegal option -- %c\n", __progname, optopt);
 
126
                return (BADCH);
 
127
        }
 
128
        if (*++oli != ':') {                    /* don't need argument */
 
129
                optarg = NULL;
 
130
                if (!*place)
 
131
                        ++optind;
 
132
        }
 
133
        else {                                  /* need an argument */
 
134
                if (*place)                     /* no white space */
 
135
                        optarg = place;
 
136
                else if (nargc <= ++optind) {   /* no arg */
 
137
                        place = EMSG;
 
138
                        if (*ostr == ':')
 
139
                                return (BADARG);
 
140
                        if (opterr)
 
141
                                (void)fprintf(stderr,
 
142
                                    "%s: option requires an argument -- %c\n",
 
143
                                    __progname, optopt);
 
144
                        return (BADCH);
 
145
                }
 
146
                else                            /* white space */
 
147
                        optarg = nargv[optind];
 
148
                place = EMSG;
 
149
                ++optind;
 
150
        }
 
151
        return (optopt);                        /* dump back option letter */
 
152
}