50 lines · 858 B · Objective-C
RawDownload
Arg: adt{	argv:	list of string;	c:	int;	opts:	string; 	init:	fn(argv: list of string): ref Arg;	opt:	fn(arg: self ref Arg): int;	arg:	fn(arg: self ref Arg): string;}; Arg.init(argv: list of string): ref Arg{	if(argv != nil)		argv = tl argv;	return ref Arg(argv, 0, nil);} Arg.opt(arg: self ref Arg): int{	if(arg.opts != ""){		arg.c = arg.opts[0];		arg.opts = arg.opts[1:];		return arg.c;	}	if(arg.argv == nil)		return arg.c = 0;	arg.opts = hd arg.argv;	if(len arg.opts < 2 || arg.opts[0] != '-')		return arg.c = 0;	arg.argv = tl arg.argv;	if(arg.opts == "--")		return arg.c = 0;	arg.c = arg.opts[1];	arg.opts = arg.opts[2:];	return arg.c;} Arg.arg(arg: self ref Arg): string{	s := arg.opts;	arg.opts = "";	if(s != "")		return s;	if(arg.argv == nil)		return "";	s = hd arg.argv;	arg.argv = tl arg.argv;	return s;}