source: vis_dev/glu-2.3/src/util/getopt.c @ 27

Last change on this file since 27 was 13, checked in by cecile, 13 years ago

library glu 2.3

File size: 1.5 KB
Line 
1/*
2 * Revision Control Information
3 *
4 * $Id: getopt.c,v 1.5 2009/01/05 21:04:04 fabio Exp $
5 *
6 */
7/* LINTLIBRARY */
8
9#include <stdio.h>
10#include "util.h"
11
12
13/*  File   : getopt.c
14 *  Author : Henry Spencer, University of Toronto
15 *  Updated: 28 April 1984
16 *
17 *  Changes: (R Rudell)
18 *      changed index() to strchr();
19 *      added getopt_reset() to reset the getopt argument parsing
20 *
21 *  Purpose: get option letter from argv.
22 */
23
24char *util_optarg;      /* Global argument pointer. */
25int util_optind = 0;    /* Global argv index. */
26static char *scan;
27
28
29void
30util_getopt_reset(void)
31{
32    util_optarg = 0;
33    util_optind = 0;
34    scan = 0;
35}
36
37
38
39int 
40util_getopt(int argc, char * const argv[], char const *optstring)
41{
42    register int c;
43    register char *place;
44
45    util_optarg = NIL(char);
46
47    if (scan == NIL(char) || *scan == '\0') {
48        if (util_optind == 0) util_optind++;
49        if (util_optind >= argc) return EOF;
50        place = argv[util_optind];
51        if (place[0] != '-' || place[1] == '\0') return EOF;
52        util_optind++;
53        if (place[1] == '-' && place[2] == '\0') return EOF;
54        scan = place+1;
55    }
56
57    c = *scan++;
58    place = strchr(optstring, c);
59    if (place == NIL(char) || c == ':') {
60        (void) fprintf(stderr, "%s: unknown option %c\n", argv[0], c);
61        return '?';
62    }
63    if (*++place == ':') {
64        if (*scan != '\0') {
65            util_optarg = scan;
66            scan = NIL(char);
67        } else {
68            if (util_optind >= argc) {
69                (void) fprintf(stderr, "%s: %c requires an argument\n", 
70                    argv[0], c);
71                return '?';
72            }
73            util_optarg = argv[util_optind];
74            util_optind++;
75        }
76    }
77    return c;
78}
Note: See TracBrowser for help on using the repository browser.