Charles.Forsyth20060303a828770d19 years agoHistory
89 lines · 2.0 KB · Brainfuck
RawDownload
implement echo; include "sys.m";	sys: Sys;stderr: ref Sys->FD;include "bufio.m"; include "draw.m";draw : Draw; include "cache.m";include "contents.m";include "httpd.m";	Private_info: import Httpd; include "cgiparse.m";cgiparse: CgiParse; echo: module{    init: fn(g: ref Private_info, req: Httpd->Request);}; init(g: ref Private_info, req: Httpd->Request) {		sys = load Sys Sys->PATH;	stderr = sys->fildes(2);		cgiparse = load CgiParse CgiParse->PATH;	if( cgiparse == nil ) {		sys->fprint( stderr, "echo: cannot load %s: %r\n", CgiParse->PATH);		return;	} 	send(g, cgiparse->cgiparse(g, req));} send(g: ref Private_info, cgidata: ref CgiData ) {		bufio := g.bufio;	Iobuf: import bufio;	if( cgidata == nil ){		g.bout.flush();		return;	}		g.bout.puts( cgidata.httphd );		g.bout.puts("<head><title>Echo</title></head>\r\n");	g.bout.puts("<body><h1>Echo</h1>\r\n");	g.bout.puts(sys->sprint("You requested a %s on %s", 	cgidata.method, cgidata.uri));	if(cgidata.search!=nil)		g.bout.puts(sys->sprint(" with search string %s", cgidata.search));	g.bout.puts(".\n");		g.bout.puts("Your client sent the following headers:<p><pre>");	g.bout.puts( "Client: " + cgidata.remote + "\n" );	g.bout.puts( "Date: " + cgidata.tmstamp + "\n" );	g.bout.puts( "Version: " + cgidata.version + "\n" );	while( cgidata.header != nil ){		(tag, val) := hd cgidata.header;		g.bout.puts( tag + " " + val + "\n" );		cgidata.header = tl cgidata.header;	}		g.bout.puts("</pre>\n");		if (cgidata.form != nil){			i := 0;		g.bout.puts("</pre>");		g.bout.puts("Your client sent the following form data:<p>");		g.bout.puts("<table>\n");		while(cgidata.form!=nil){				(tag, val) := hd cgidata.form;			g.bout.puts(sys->sprint("<tr><td>%d</td><td><I> ",i));			g.bout.puts(tag);			g.bout.puts("</I></td> ");			g.bout.puts("<td><B> ");			g.bout.puts(val);			g.bout.puts("</B></td></tr>\n");			g.bout.puts("\n");			cgidata.form = tl cgidata.form;			i++;		}		g.bout.puts("</table>\n");	}		g.bout.puts("</body>\n");	g.bout.flush();}