update dev300-m58
[ooovba.git] / idlc / source / preproc / getopt.c
blob978aaee240d6a8d0aa2bd0b386d8cd563e33475c
1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: getopt.c,v $
10 * $Revision: 1.7 $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 #include <stdio.h>
32 #include <string.h>
34 #define EPR fprintf(stderr,
35 #define ERR(str, chr) if(opterr) { EPR "%s%c\n", str, chr); }
37 int opterr = 1;
38 int optind = 1;
39 int optopt;
40 char *optarg;
42 int
43 cppgetopt(int argc, char *const argv[], const char *opts)
45 static int sp = 1;
46 register int c;
47 register char *cp;
49 if (sp == 1)
51 if (optind >= argc ||
52 argv[optind][0] != '-' || argv[optind][1] == '\0')
53 return -1;
54 else
55 if (strcmp(argv[optind], "--") == 0)
57 optind++;
58 return -1;
61 optopt = c = argv[optind][sp];
62 if (c == ':' || (cp = strchr(opts, c)) == 0)
64 ERR(": illegal option -- ", c);
65 if (argv[optind][++sp] == '\0')
67 optind++;
68 sp = 1;
70 return '?';
72 if (*++cp == ':')
74 if (argv[optind][sp + 1] != '\0')
75 optarg = &argv[optind++][sp + 1];
76 else
77 if (++optind >= argc)
79 ERR(": option requires an argument -- ", c);
80 sp = 1;
81 return '?';
83 else
84 optarg = argv[optind++];
85 sp = 1;
87 else
89 if (argv[optind][++sp] == '\0')
91 sp = 1;
92 optind++;
94 optarg = 0;
96 return c;