henesyinit from lsubb0c8bdb6 years agoHistory
91 lines · 1.3 KB · C
RawDownload
#include <u.h>#include <libc.h>#include <plumb.h> int debug;char* cmd; static voidmsg(Plumbmsg* m){	char*	pg;	char*	sec;	char*	p; 	p = strrchr(m->data, ']');	if (!p)		return;	*p = 0;	sec = strrchr(m->data, '[');	if (!sec)		return;	*sec++ = 0;	pg = m->data;	free(cmd);	cmd = smprint("man -t %s %s | page -w", sec, pg);	switch(rfork(RFPROC|RFNOWAIT|RFMEM|RFFDG)){	case 0:		execl("/bin/rc", "rc", "-c", cmd, nil);		exits("exec");	case -1:		sysfatal("fork: %r");	default:		if (debug)			fprint(2, "plumbing rc -c '%s'\n", cmd);	}} intcreateport(char* name){	int	fd;	char*	fname; 	fname = smprint("/devs/ports/%s", name);	assert(fname);	if (access(fname, AREAD) >= 0)		fd = open(fname, OREAD|OCEXEC);	else		fd = create(fname, OREAD|OCEXEC, 0660);	free(fname);	return fd;} static voidusage(void){		fprint(2, "usage: %s [-p port] \n", argv0);		sysfatal("usage");} voidmain(int argc, char* argv[]){	Plumbmsg* m;	int plumbfd;	char*	port;  	port="man";	ARGBEGIN{	case 'd':		debug++;		break;	case 'p':		port = EARGF(usage());	default:		usage();	}ARGEND;	if (argc > 0)		usage();	plumbfd = createport(port);	if (plumbfd < 0)		sysfatal("port %s: %r", port);	for(;;){		m = plumbrecv(plumbfd);		if(m == nil)			sysfatal("plumbrecv port %s: %r", port);		msg(m);		plumbfree(m);	}}