shithub: ircd

ref: b579d46f62e61c4fbb97ed9edd024ddb26def34d
dir: /ircd.c/

View raw version
#include <u.h>
#include <libc.h>
#include <bio.h>
#include "dat.h"
#include "fns.h"
#include "version.h"

void
usage(void)
{
	fprint(2, "usage: %s\n", argv0);
	exits("usage");
}

static Biobuf *bio;
static char *sysnameb = "nil";
static char *versionstring = nil;
int debug = 0;

char*
getversion()
{
	if (versionstring)
		return versionstring;
	
	versionstring = smprint("%s.%d %s :%s", Vversion, debug, Vname, Vcomment);
	return versionstring;
}

static void
parselines(void)
{
	char *line;
	Request parsedrequest;
	
	while (line = Brdstr(bio, '\n', 1)) {
		parsedrequest = parseline(line);
		if (debug > 1)
			fprint(2, "request: %R\n", parsedrequest);
		execrequest(parsedrequest);
		free(line);
	}
}

void
main(int argc, char **argv)
{
	ARGBEGIN{
	case 'h':
		usage();
		break;
	case 'v':
		fprint(2, "version: %s\n", getversion());
		exits(nil);
	case 'd':
		debug++;
		break;
	}ARGEND;
	
	fmtinstall('R', Rfmt);
	
	sysnameb = sysname();
	
	bio = Bfdopen(0, OREAD);
	parselines();
}

void
reply(Reply repl, ...)
{
	char buf[511];
	va_list arg;
	
	va_start(arg, repl);
	vsnprint(buf, sizeof buf, repl.msg, arg);
	va_end(arg);
	print(":%s %03d %s\r\n", sysnameb, repl.nr, buf);
}