Charles.Forsyth20060303a828770d19 years agoHistory
50 lines · 865 B · Brainfuck
RawDownload
implement Basename; include "sys.m";	sys: Sys; include "draw.m"; include "names.m";	names: Names; include "arg.m"; Basename: module{	init:	fn(nil: ref Draw->Context, nil: list of string);}; init(nil: ref Draw->Context, args: list of string){	sys = load Sys Sys->PATH;	names = load Names Names->PATH;	arg := load Arg Arg->PATH; 	dirname := 0;	arg->init(args);	arg->setusage("basename [-d] string [suffix]");	while((o := arg->opt()) != 0)		case o {		'd' =>			dirname = 1;		* =>			arg->usage();		}	args = arg->argv();	if(args == nil || tl args != nil && (dirname || tl tl args != nil))		arg->usage();	arg = nil; 	if(dirname){		s := names->dirname(hd args);		if(s == nil)			s = ".";		sys->print("%s\n", s);		exit;	}	suffix: string;	if(tl args != nil)		suffix = hd tl args;	sys->print("%s\n", names->basename(hd args, suffix));}