Charles.Forsyth20060303a828770d19 years agoHistory
62 lines · 1.2 KB · Brainfuck
RawDownload
implement Read;include "sys.m"; 	sys: Sys;include "draw.m"; Read: module {	init: fn(nil: ref Draw->Context, argv: list of string);}; usage(){	sys->fprint(sys->fildes(2), "usage: read [-[ero] offset] count\n");	raise "fail:usage";} init(nil: ref Draw->Context, argv: list of string){	sys = load Sys Sys->PATH;	# usage: read [-[ero] offset] count	count := Sys->ATOMICIO;	offset := big 0;	seeking := -1;	if (argv != nil)		argv = tl argv;	if (argv != nil && hd argv != nil && (hd argv)[0] == '-') {		if (tl argv == nil)			usage();		case hd argv {		"-o" =>			seeking = Sys->SEEKSTART;		"-e" =>			seeking = Sys->SEEKEND;		"-r" =>			seeking = Sys->SEEKRELA;		* =>			usage();		}		offset = big hd tl argv;		argv = tl tl argv;	}	if (argv != nil) {		if (tl argv != nil)			usage();		count = int hd argv;	}	fd := sys->fildes(0);	if (seeking != -1)		sys->seek(fd, offset, seeking);	if (count == 0)		return;	buf := array[count] of byte;	n := sys->read(fd, buf, len buf);	if (n > 0)		sys->write(sys->fildes(1), buf, n);	else {		if (n == -1) {			sys->fprint(sys->fildes(2), "read: read error: %r\n");			raise "fail:error";		}		raise "fail:eof";	}}