Charles.Forsyth20060303a828770d19 years agoHistory
66 lines · 1.4 KB · Brainfuck
RawDownload
RAWON_STR := "*"; RAWON : con 0;RAWOFF : con 1; promptstring(prompt, def: string, mode: int): string{	if(mode == RAWON || def == nil || def == "")		sys->fprint(stdout, "%s: ", prompt);	else		sys->fprint(stdout, "%s [%s]: ", prompt, def);	(eof, resp) := readline(stdin, mode);	if(eof)		exit;	if(resp == "")		resp = def;	return resp;} readline(fd: ref Sys->FD, mode: int): (int, string){	i: int;	eof: int;	fdctl: ref Sys->FD; 	eof = 0;	buf := array[128] of byte;	tmp := array[128] of byte;		if(mode == RAWON){		fdctl = sys->open("/dev/consctl", sys->OWRITE);		if(fdctl == nil || sys->write(fdctl,array of byte "rawon",5) != 5){			sys->fprint(stderr, "unable to change console mode");			return (1,nil);		}	} 	for(sofar := 0; sofar < 128; sofar += i){		i = sys->read(fd, tmp, 128 - sofar);		if(i <= 0){			eof = 1;			break;		}		if(tmp[i-1] == byte '\n'){			for(j := 0; j < i-1; j++){				buf[sofar+j] = tmp[j];				if(mode == RAWON && RAWON_STR != nil)				   sys->write(stdout,array of byte RAWON_STR,1);			}			sofar += j;			if(mode == RAWON)				sys->write(stdout,array of byte "\n",1);			break;		}		else {			for(j := 0; j < i; j++){				buf[sofar+j] = tmp[j];				if(mode == RAWON && RAWON_STR != nil)				   sys->write(stdout,array of byte RAWON_STR,1);			}		}			}	if(mode == RAWON)		sys->write(fdctl,array of byte "rawoff",6);	return (eof, string buf[0:sofar]);}