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