#include <u.h>
#include <libc.h>
#include <ip.h>
#include <fcall.h>
#include "dat.h"
#include "protos.h"

static void
p_compile(Filter *f)
{
	sysfatal("unknown ninep field: %s", f->s);
}

static int
p_filter(Filter *f, Msg *m)
{
	USED(f);
	USED(m);
	return 0;
}

static int
p_seprint(Msg *m)
{
	Fcall f;
	char *p;

	memset(&f, 0, sizeof(f));
	f.type = 0;
	f.data = 0;	/* protection for %F */
	if(convM2S(m->ps, m->pe-m->ps, &f)){
		p = m->p;
		m->p = seprint(m->p, m->e, "%F", &f);
		while(p < m->p){
			p = strchr(p, '\n');
			if(p == nil)
				break;
			*p = '\\';
		}
	} else
		dump.seprint(m);
	m->pr = nil;
	return 0;
}

Proto ninep =
{
	"ninep",
	p_compile,
	p_filter,
	p_seprint,
	nil,
	nil,
	defaultframer,
};
