Charles.Forsyth20060303a828770d19 years agoHistory
71 lines · 1.2 KB · Brainfuck
RawDownload
implement Date; include "sys.m";	sys: Sys; include "draw.m";include "daytime.m";include "arg.m"; Date: module{	init:	fn(ctxt: ref Draw->Context, argv: list of string);}; usage(){	sys->fprint(sys->fildes(2), "usage: date [-un] [seconds]\n");	raise "fail:usage";} nomod(m: string){	sys->fprint(sys->fildes(2), "date: cannot load %s: %r", m);	raise "fail:load";} init(nil: ref Draw->Context, argv: list of string){	sys = load Sys Sys->PATH;	daytime := load Daytime Daytime->PATH;	if (daytime == nil)		nomod(Daytime->PATH);	arg := load Arg Arg->PATH;	if (arg == nil)		nomod(Arg->PATH);	nflag := uflag := 0;	arg->init(argv);	while ((opt := arg->opt()) != 0) {		case opt {		'n' =>			nflag = 1;		'u' =>			uflag = 1;		* =>			usage();		}	}	argv = arg->argv();	arg = nil;	if (argv != nil && (tl argv != nil || !isnumeric(hd argv)))		usage();	now: int;	if (argv != nil)		now = int hd argv;	else		now = daytime->now();	if (nflag)		sys->print("%d\n", now);	else if (uflag)		sys->print("%s\n", daytime->text(daytime->gmt(now)));	else		sys->print("%s\n", daytime->text(daytime->local(now)));} isnumeric(s: string): int{	for (i := 0; i < len s; i++)		if (s[i] < '0' || s[i] > '9')			return 0;	return 1;}