diff options
| author | Nicolas "Pixel" Noble <pixel@nobis-crew.org> | 2014-07-31 18:18:18 +0200 | 
|---|---|---|
| committer | Nicolas "Pixel" Noble <pixel@nobis-crew.org> | 2014-07-31 18:18:18 +0200 | 
| commit | 680a012532e2d962a55c1a588900c3b52c0d6b69 (patch) | |
| tree | 613b0399000e5c72290efa2497cf008fbccb12df /win32/getopt | |
| parent | 3c97ca53d8279f0f16ca2f82a703bafa517e39f3 (diff) | |
| parent | ee0ffcb7bcb46d3d129bd262781d54afa736ffbb (diff) | |
Merge branch 'master' of /pub/repo.git/Balau
Diffstat (limited to 'win32/getopt')
| -rw-r--r-- | win32/getopt/getopt.c | 129 | ||||
| -rw-r--r-- | win32/getopt/getopt.h | 17 | 
2 files changed, 146 insertions, 0 deletions
diff --git a/win32/getopt/getopt.c b/win32/getopt/getopt.c new file mode 100644 index 0000000..6d74b39 --- /dev/null +++ b/win32/getopt/getopt.c @@ -0,0 +1,129 @@ +/* +	I got this off net.sources from Henry Spencer. +	It is a public domain getopt(3) like in System V. +	I have made the following modifications: + +	index(s,c) was added because too many people could +	not compile getopt without it. + +	A test main program was added, ifdeffed by GETOPT. +	This main program is a public domain implementation +	of the getopt(1) program like in System V.  The getopt +	program can be used to standardize shell option handling. +		e.g.  cc -DGETOPT getopt.c -o getopt +*/ +#include <stdio.h> + +#ifndef lint +static	char	sccsfid[] = "@(#) getopt.c 5.0 (UTZoo) 1985"; +#endif + +#define	ARGCH    (int)':' +#define BADCH	 (int)'?' +#define EMSG	 "" +#define	ENDARGS  "--" + +/* this is included because index is not on some UNIX systems */ +static +char * +index (s, c) +register	char	*s; +register	int 	c; +	{ +	while (*s) +		if (c == *s) return (s); +		else s++; +	return (NULL); +	} + +/* + * get option letter from argument vector + */ +int	opterr = 1,		/* useless, never set or used */ +	optind = 1,		/* index into parent argv vector */ +	optopt;			/* character checked for validity */ +char	*optarg;		/* argument associated with option */ + +#define tell(s)	fputs(*nargv,stderr);fputs(s,stderr); \ +		fputc(optopt,stderr);fputc('\n',stderr);return(BADCH); + + +getopt(nargc,nargv,ostr) +int	nargc; +char	**nargv, +	*ostr; +{ +	static char	*place = EMSG;	/* option letter processing */ +	register char	*oli;		/* option letter list index */ +	char	*index(); + +	if(!*place) {			/* update scanning pointer */ +		if(optind >= nargc || *(place = nargv[optind]) != '-' || !*++place) return(EOF); +		if (*place == '-') {	/* found "--" */ +			++optind; +			return(EOF); +		} +	}				/* option letter okay? */ +	if ((optopt = (int)*place++) == ARGCH || !(oli = index(ostr,optopt))) { +		if(!*place) ++optind; +		tell(": illegal option -- "); +	} +	if (*++oli != ARGCH) {		/* don't need argument */ +		optarg = NULL; +		if (!*place) ++optind; +	} +	else {				/* need an argument */ +		if (*place) optarg = place;	/* no white space */ +		else if (nargc <= ++optind) {	/* no arg */ +			place = EMSG; +			tell(": option requires an argument -- "); +		} +	 	else optarg = nargv[optind];	/* white space */ +		place = EMSG; +		++optind; +	} +	return(optopt);			/* dump back option letter */ +} + + +#ifdef GETOPT + +#ifndef lint +static	char	sccspid[] = "@(#) getopt.c 5.1 (WangInst) 6/15/85"; +#endif + +main (argc, argv) char **argv; +	{ +	char	*optstring = argv[1]; +	char	*argv0 = argv[0]; +	extern	int 	optind; +	extern	char	*optarg; +	int 	opterr = 0; +	int 	C; +	char	*opi; +	if (argc == 1) +		{ +		fprintf (stderr, "Usage: %s optstring args\n", argv0); +		exit (1); +		} +	argv++; +	argc--; +	argv[0] = argv0; +	while ((C = getopt (argc, argv, optstring)) != EOF) +		{ +		if (C == BADCH) opterr++; +		printf ("-%c ", C); +		opi = index (optstring, C); +		if (opi && opi[1] == ARGCH) +			if (optarg) +				printf ("\"%s\" ", optarg); +			else opterr++; +		} +	printf ("%s", ENDARGS); +	while (optind < argc) +		printf (" \"%s\"", argv[optind++]); +	putchar ('\n'); +	exit (opterr); +	} + +#endif diff --git a/win32/getopt/getopt.h b/win32/getopt/getopt.h new file mode 100644 index 0000000..f77cb17 --- /dev/null +++ b/win32/getopt/getopt.h @@ -0,0 +1,17 @@ +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +int getopt(int nargc, char ** nargv, char * ostr); + +#ifdef __cplusplus +} +#endif + + +extern int opterr = 1; +extern int optind = 1; +extern int optopt; +extern char * optarg;  | 
