xref: /csrg-svn/local/toolchest/ksh/getopts (revision 35117)
1*35117Smarc# for compatibility with the S5R3 /bin/sh getopts builtin
2*35117Smarcfunction _getopts # [ arg ] ... optstring name
3*35117Smarc{
4*35117Smarc	OPTIND=${OPTIND:-1}
5*35117Smarc	integer n=$#-1
6*35117Smarc	eval typeset opstring=['$'$n] name='$'{$#} balance
7*35117Smarc	typeset -L1 c  d
8*35117Smarc	shift OPTIND-1
9*35117Smarc	if	test X"$_arg" = X
10*35117Smarc	then	if	(($# > 0))
11*35117Smarc		then	_arg=$1
12*35117Smarc			shift
13*35117Smarc		else	return 1
14*35117Smarc		fi
15*35117Smarc	fi
16*35117Smarc	case $_arg in
17*35117Smarc	--)
18*35117Smarc		_arg=
19*35117Smarc		return 1
20*35117Smarc		;;
21*35117Smarc	-*)
22*35117Smarc		c=${_arg#-}
23*35117Smarc		case $c in
24*35117Smarc		$opstring)
25*35117Smarc			d=${opstring#*$c}
26*35117Smarc			balance=${_arg#*$c}
27*35117Smarc			if	test X"$balance" = X
28*35117Smarc			then	if	test X$d = X:
29*35117Smarc				then	OPTARG=$1
30*35117Smarc					let OPTIND=OPTIND+2
31*35117Smarc				else	let OPTIND=OPTIND+1
32*35117Smarc				fi
33*35117Smarc				_arg=
34*35117Smarc			else	if	test X$d = X:
35*35117Smarc				then	OPTARG=$balance _arg=
36*35117Smarc					let OPTIND=OPTIND+1
37*35117Smarc				else	_arg=-$balance
38*35117Smarc				fi
39*35117Smarc			fi
40*35117Smarc			eval $name=$c
41*35117Smarc			return 0
42*35117Smarc			;;
43*35117Smarc		*)	echo $0: bad option
44*35117Smarc			eval $name=?
45*35117Smarc			return 1
46*35117Smarc			;;
47*35117Smarc		esac
48*35117Smarc		;;
49*35117Smarc	*)
50*35117Smarc		_arg=
51*35117Smarc		return 1
52*35117Smarc		;;
53*35117Smarc	esac
54*35117Smarc}
55*35117Smarcalias getopts='_getopts "$@"'
56