Path: utzoo!censor!isgtec!robert From: robert@isgtec.UUCP (Robert Osborne) Newsgroups: alt.sources Subject: Re: yet Another test AND a PD getopt Message-ID: <1074@isgtec.UUCP> Date: 21 May 91 15:07:31 GMT Sender: news@isgtec.UUCP Reply-To: robert@isgtec.UUCP Organization: IAP Group, ISG Technologies Lines: 136 In article , denv@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@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 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