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));}
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));
}