Home | History | Annotate | Download | only in bnu
      1 /*
      2  * CDDL HEADER START
      3  *
      4  * The contents of this file are subject to the terms of the
      5  * Common Development and Distribution License, Version 1.0 only
      6  * (the "License").  You may not use this file except in compliance
      7  * with the License.
      8  *
      9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
     10  * or http://www.opensolaris.org/os/licensing.
     11  * See the License for the specific language governing permissions
     12  * and limitations under the License.
     13  *
     14  * When distributing Covered Code, include this CDDL HEADER in each
     15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     16  * If applicable, add the following below this CDDL HEADER, with the
     17  * fields enclosed by brackets "[]" replaced with your own identifying
     18  * information: Portions Copyright [yyyy] [name of copyright owner]
     19  *
     20  * CDDL HEADER END
     21  */
     22 /*	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T	*/
     23 /*	  All Rights Reserved  	*/
     24 
     25 
     26 #ident	"%Z%%M%	%I%	%E% SMI"	/* from SVR4 bnu:getopt.c 2.3 */
     27 
     28 #include "uucp.h"
     29 
     30 /*	@(#)getopt.c	1.2	*/
     31 /*	3.0 SID #	1.2	*/
     32 /*LINTLIBRARY*/
     33 #define ERR(s, c)	if(opterr){\
     34 	(void) fputs(argv[0], stderr);\
     35 	(void) fputs(s, stderr);\
     36 	(void) fputc(c, stderr);\
     37 	(void) fputc('\n', stderr);}
     38 
     39 extern int strcmp();
     40 extern char *strchr();
     41 
     42 int	opterr = 1;
     43 int	optind = 1;
     44 int	optopt;
     45 char	*optarg;
     46 
     47 int
     48 getopt(argc, argv, opts)
     49 int	argc;
     50 char	**argv, *opts;
     51 {
     52 	static int sp = 1;
     53 	register int c;
     54 	register char *cp;
     55 
     56 	if(sp == 1)
     57 		if(optind >= argc ||
     58 		   argv[optind][0] != '-' || argv[optind][1] == '\0')
     59 			return(EOF);
     60 		else if(strcmp(argv[optind], "--") == NULL) {
     61 			optind++;
     62 			return(EOF);
     63 		}
     64 	optopt = c = argv[optind][sp];
     65 	if(c == ':' || (cp=strchr(opts, c)) == NULL) {
     66 		ERR(": illegal option -- ", c);
     67 		if(argv[optind][++sp] == '\0') {
     68 			optind++;
     69 			sp = 1;
     70 		}
     71 		return('?');
     72 	}
     73 	if(*++cp == ':') {
     74 		if(argv[optind][sp+1] != '\0')
     75 			optarg = &argv[optind++][sp+1];
     76 		else if(++optind >= argc) {
     77 			ERR(": option requires an argument -- ", c);
     78 			sp = 1;
     79 			return('?');
     80 #ifndef NO_MINUS
     81 		} else
     82 			optarg = argv[optind++];
     83 #else /* NO_MINUS */
     84 		} else {
     85 			optarg = argv[optind++];
     86 			if (*optarg == '-') {
     87 			    ERR(": option requires an argument -- ", c);
     88 			    sp = 1;
     89 			    return('?');
     90 			}
     91 		}
     92 #endif /* NO_MINUS */
     93 		sp = 1;
     94 	} else {
     95 		if(argv[optind][++sp] == '\0') {
     96 			sp = 1;
     97 			optind++;
     98 		}
     99 		optarg = NULL;
    100 	}
    101 	return(c);
    102 }
    103