yet Another test AND a PD getopt

Robert Osborne robert at isgtec.UUCP
Wed May 22 01:07:31 AEST 1991


In article <remus at paul.alpha.edu>, denv at nywu writes:
|> this is just a test.

Why is this in alt.sources?  It was crossposted to alt.test, so obviously
it's more than just the fact that you're a moron.  Why post a test
why not post some sources?

Rob.

OB. Source

Here is a getopt I wrote (now PD) because Turbo C doesn't have one!
(Maybe they'll put this one into their libraries now :-)

#!/bin/sh
# This is a shell archive (produced by shar 3.49)
# To extract the files from this archive, save it to a file, remove
# everything above the "!/bin/sh" line above, and type "sh file_name".
#
# made 05/21/1991 15:01 UTC by robert at isgtec.UUCP
# Source directory /tmp_mnt/home/joker1/robert/test/getopt
#
# existing files will NOT be overwritten unless -c is specified
#
# This shar contains:
# length  mode       name
# ------ ---------- ------------------------------------------
#   1870 -rw-rw-r-- getopt.c
#
# ============= getopt.c ==============
if test -f 'getopt.c' -a X"$1" != X"-c"; then
	echo 'x - skipping getopt.c (File already exists)'
else
echo 'x - extracting getopt.c (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'getopt.c' &&
/*
**	This getopt behaves pretty much like you would expect.
**	It does handle arguments like '-ab-' a little differently
**  then normal;  I think the -- 'stop option processing' should
**  be treated like just another option,  so that's what mine does.
**  Other getopts seem to ignore the second '-' in '-ab-'.
**
**  I hereby place this version of getopt in
**  the public domain.  Do with this what you will.
**  I'm sure there is a nicer and faster version out there
**  somewhere but I don't care!
**
**  Robert Osborne, May 1991.
*/
#include <stdio.h>
X
int optind = 1;
int opterr = 1;
char *optarg = (char *) 0;
X
static char *next_arg = (char *) 0;
X
#define NO_OPT		0
#define OPT_PLAIN	1
#define OPT_ARG		2
X
X	
int
getopt(argc, argv, optstring)
X	int argc;
X	char *argv[];
X	char *optstring;
{
X	int ret;
X	int which = NO_OPT;
X	
X	if( next_arg == (char *)0 )
X	{
X		if( argv[optind] == (char *) 0 || argv[optind][0] != '-' )
X			return -1;
X		next_arg = &argv[optind][1];
X	}
X	if( *next_arg == '\0' || *next_arg == '-' )
X	{
X		optind++;
X		return -1;
X	}
X
X	while(*optstring)
X		if( *next_arg == *optstring++ )
X			which = (*optstring == ':') ? OPT_ARG : OPT_PLAIN;
X			
X	switch( which )
X	{
X	case NO_OPT:
X	case OPT_PLAIN:
X		ret = *next_arg++;
X		if( *next_arg == '\0' )
X		{
X			optind++;
X			next_arg = (char *)0;
X		}
X		if( which == OPT_PLAIN )
X			return ret;
X		if( opterr )
X			fprintf(stderr, "%s: illegal option -- %c\n", argv[0], ret);
X		return '?';
X	case OPT_ARG:
X		ret = *next_arg++;
X		optind++;
X		if( *next_arg != '\0' )
X		{
X			optarg = next_arg;
X			next_arg = (char *)0;
X			return ret;
X		}
X		else if( argv[optind] != (char *) 0 )
X		{
X			optarg = argv[optind];
X			optind++;
X			next_arg = (char *) 0;
X			return ret;
X		}
X		else
X		{
X			next_arg = (char *) 0;
X			if( opterr )
X				fprintf(stderr, "%s: option requires an option -- %c\n",
X						argv[0], ret);
X			return '?';
X		}
X	}
}
SHAR_EOF
chmod 0664 getopt.c ||
echo 'restore of getopt.c failed'
Wc_c="`wc -c < 'getopt.c'`"
test 1870 -eq "$Wc_c" ||
	echo 'getopt.c: original size 1870, current size' "$Wc_c"
fi
exit 0



More information about the Alt.sources mailing list