office-gobmx/idlc/source/preproc/getopt.c
Oliver Bolte ff56183b7c INTEGRATION: CWS os2port03 (1.5.12); FILE MERGED
2008/07/16 12:23:28 obr 1.5.12.2: RESYNC: (1.5-1.6); FILE MERGED
2008/01/29 14:40:36 ydario 1.5.12.1: os2 builds as other platforms now.
Issue number:i85203
Submitted by:ydario
2008-07-22 15:54:11 +00:00

97 lines
2.6 KiB
C

/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2008 by Sun Microsystems, Inc.
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: getopt.c,v $
* $Revision: 1.7 $
*
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3
* only, as published by the Free Software Foundation.
*
* OpenOffice.org is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License version 3 for more details
* (a copy is included in the LICENSE file that accompanied this code).
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with OpenOffice.org. If not, see
* <http://www.openoffice.org/license.html>
* for a copy of the LGPLv3 License.
*
************************************************************************/
#include <stdio.h>
#include <string.h>
#define EPR fprintf(stderr,
#define ERR(str, chr) if(opterr) { EPR "%s%c\n", str, chr); }
int opterr = 1;
int optind = 1;
int optopt;
char *optarg;
int
cppgetopt(int argc, char *const argv[], const char *opts)
{
static int sp = 1;
register int c;
register char *cp;
if (sp == 1)
{
if (optind >= argc ||
argv[optind][0] != '-' || argv[optind][1] == '\0')
return -1;
else
if (strcmp(argv[optind], "--") == 0)
{
optind++;
return -1;
}
}
optopt = c = argv[optind][sp];
if (c == ':' || (cp = strchr(opts, c)) == 0)
{
ERR(": illegal option -- ", c);
if (argv[optind][++sp] == '\0')
{
optind++;
sp = 1;
}
return '?';
}
if (*++cp == ':')
{
if (argv[optind][sp + 1] != '\0')
optarg = &argv[optind++][sp + 1];
else
if (++optind >= argc)
{
ERR(": option requires an argument -- ", c);
sp = 1;
return '?';
}
else
optarg = argv[optind++];
sp = 1;
}
else
{
if (argv[optind][++sp] == '\0')
{
sp = 1;
optind++;
}
optarg = 0;
}
return c;
}