aggr Notemsg {
	'a'    0 note;
};

defn
Notemsg(addr) {
	complex Notemsg addr;
	print("	note	", addr.note, "\n");
};

union Length {
	'a'    0 clength;
	{
	'D'    0 hlength;
	'D'    4 length;
	};
};

defn
Length(addr) {
	complex Length addr;
	print("	clength	", addr.clength, "\n");
};

aggr Qid {
	'U'    0 path;
	'U'    4 vers;
};

defn
Qid(addr) {
	complex Qid addr;
	print("	path	", addr.path, "\n");
	print("	vers	", addr.vers, "\n");
};

aggr Dir {
	'a'    0 name;
	'a'   28 uid;
	'a'   56 gid;
	Qid   84 qid;
	'U'   92 mode;
	'D'   96 atime;
	'D'  100 mtime;
	{
	'a'  104 clength;
	{
	'D'  104 hlength;
	'D'  108 length;
	};
	};
	'u'  112 type;
	'u'  114 dev;
};

defn
Dir(addr) {
	complex Dir addr;
	print("	name	", addr.name, "\n");
	print("	uid	", addr.uid, "\n");
	print("	gid	", addr.gid, "\n");
	print("Qid qid {\n");
	Qid(addr.qid);
	print("}\n");
	print("	mode	", addr.mode, "\n");
	print("	atime	", addr.atime, "\n");
	print("	mtime	", addr.mtime, "\n");
	print("	type	", addr.type, "\n");
	print("	dev	", addr.dev, "\n");
};

aggr Waitmsg {
	'a'    0 pid;
	'a'   12 time;
	'a'   48 msg;
};

defn
Waitmsg(addr) {
	complex Waitmsg addr;
	print("	pid	", addr.pid, "\n");
	print("	time	", addr.time, "\n");
	print("	msg	", addr.msg, "\n");
};

aggr Tm {
	'D'    0 sec;
	'D'    4 min;
	'D'    8 hour;
	'D'   12 mday;
	'D'   16 mon;
	'D'   20 year;
	'D'   24 wday;
	'D'   28 yday;
	'a'   32 zone;
};

defn
Tm(addr) {
	complex Tm addr;
	print("	sec	", addr.sec, "\n");
	print("	min	", addr.min, "\n");
	print("	hour	", addr.hour, "\n");
	print("	mday	", addr.mday, "\n");
	print("	mon	", addr.mon, "\n");
	print("	year	", addr.year, "\n");
	print("	wday	", addr.wday, "\n");
	print("	yday	", addr.yday, "\n");
	print("	zone	", addr.zone, "\n");
};

aggr Arg {
	'X'    0 arg0;
	'D'    4 ac;
	'X'    8 av;
	'X'   12 p;
};

defn
Arg(addr) {
	complex Arg addr;
	print("	arg0	", addr.arg0, "\n");
	print("	ac	", addr.ac, "\n");
	print("	av	", addr.av, "\n");
	print("	p	", addr.p, "\n");
};

aggr Printspec {
	'X'    0 o;
	'D'    4 f1;
	'D'    8 f2;
	'D'   12 f3;
	'D'   16 chr;
	'X'   20 out;
	'X'   24 eout;
};

defn
Printspec(addr) {
	complex Printspec addr;
	print("	o	", addr.o, "\n");
	print("	f1	", addr.f1, "\n");
	print("	f2	", addr.f2, "\n");
	print("	f3	", addr.f3, "\n");
	print("	chr	", addr.chr, "\n");
	print("	out	", addr.out, "\n");
	print("	eout	", addr.eout, "\n");
};

adt Lock {
	'D'    0 val;
};

defn
Lock(addr) {
	complex Lock addr;
	print("	val	", addr.val, "\n");
};

adt QLock {
	Lock    0 use;
	'D'    4 used;
	'X'    8 queue;
};

defn
QLock(addr) {
	complex QLock addr;
	print("Lock use {\n");
	Lock(addr.use);
	print("}\n");
	print("	used	", addr.used, "\n");
	print("	queue	", addr.queue, "\n");
};

adt RWlock {
	{
	'D'    0 val;
	};
	QLock    4 x;
	QLock   16 k;
	'D'   28 readers;
};

defn
RWlock(addr) {
	complex RWlock addr;
	print("QLock x {\n");
	QLock(addr.x);
	print("}\n");
	print("QLock k {\n");
	QLock(addr.k);
	print("}\n");
	print("	readers	", addr.readers, "\n");
};

adt Ref {
	Lock    0 l;
	'D'    4 cnt;
};

defn
Ref(addr) {
	complex Ref addr;
	print("Lock l {\n");
	Lock(addr.l);
	print("}\n");
	print("	cnt	", addr.cnt, "\n");
};

adt Biobufhdr {
	{
	Lock    0 use;
	'D'    4 used;
	'X'    8 queue;
	};
	'D'   12 icount;
	'D'   16 ocount;
	'D'   20 nrdline;
	'D'   24 runesize;
	'D'   28 state;
	'D'   32 fid;
	'D'   36 flag;
	'D'   40 off;
	'D'   44 bsize;
	'X'   48 bbuf;
	'X'   52 ebuf;
};

defn
Biobufhdr(addr) {
	complex Biobufhdr addr;
	print("	icount	", addr.icount, "\n");
	print("	ocount	", addr.ocount, "\n");
	print("	nrdline	", addr.nrdline, "\n");
	print("	runesize	", addr.runesize, "\n");
	print("	state	", addr.state, "\n");
	print("	fid	", addr.fid, "\n");
	print("	flag	", addr.flag, "\n");
	print("	off	", addr.off, "\n");
	print("	bsize	", addr.bsize, "\n");
	print("	bbuf	", addr.bbuf, "\n");
	print("	ebuf	", addr.ebuf, "\n");
};

adt Biobuf {
	{
	{
	Lock    0 use;
	'D'    4 used;
	'X'    8 queue;
	};
	'D'   12 icount;
	'D'   16 ocount;
	'D'   20 nrdline;
	'D'   24 runesize;
	'D'   28 state;
	'D'   32 fid;
	'D'   36 flag;
	'D'   40 off;
	'D'   44 bsize;
	'X'   48 bbuf;
	'X'   52 ebuf;
	};
	'a'   56 b;
};

defn
Biobuf(addr) {
	complex Biobuf addr;
	print("	b	", addr.b, "\n");
};

aggr Event {
	'D'    0 c1;
	'D'    4 c2;
	'D'    8 q0;
	'D'   12 q1;
	'D'   16 flag;
	'D'   20 nb;
	'D'   24 nr;
	'a'   28 b;
	'a'  126 r;
};

defn
Event(addr) {
	complex Event addr;
	print("	c1	", addr.c1, "\n");
	print("	c2	", addr.c2, "\n");
	print("	q0	", addr.q0, "\n");
	print("	q1	", addr.q1, "\n");
	print("	flag	", addr.flag, "\n");
	print("	nb	", addr.nb, "\n");
	print("	nr	", addr.nr, "\n");
	print("	b	", addr.b, "\n");
	print("	r	", addr.r, "\n");
};

adt Win {
	'D'    0 winid;
	'D'    4 addr;
	'X' Biobuf    8 body;
	'D'   12 ctl;
	'D'   16 data;
	'D'   20 event;
	'a'   24 buf;
	'X'  536 bufp;
	'D'  540 nbuf;
};

defn
Win(addr) {
	complex Win addr;
	print("	winid	", addr.winid, "\n");
	print("	addr	", addr.addr, "\n");
	print("	body	", addr.body, "\n");
	print("	ctl	", addr.ctl, "\n");
	print("	data	", addr.data, "\n");
	print("	event	", addr.event, "\n");
	print("	buf	", addr.buf, "\n");
	print("	bufp	", addr.bufp, "\n");
	print("	nbuf	", addr.nbuf, "\n");
};

adt Awin {
	{
	'D'    0 winid;
	'D'    4 addr;
	'X' Biobuf    8 body;
	'D'   12 ctl;
	'D'   16 data;
	'D'   20 event;
	'a'   24 buf;
	'X'  536 bufp;
	'D'  540 nbuf;
	};
};

defn
Awin(addr) {
	complex Awin addr;
};

complex Awin main:a;
complex Awin main:a;
complex Awin Awin_new:a;
complex Awin Awin_slave:a;
complex Event Awin_slave:e;
complex Event Awin_slave:e2;
complex Event Awin_slave:eq;
complex Awin Awin_command:a;
complex Awin Awin_send:a;
complex Win Win_wnew:w;
complex Win Win_openfile:w;
complex Win Win_openbody:w;
complex Win Win_wwritebody:w;
complex Win Win_wreplace:w;
complex Win Win_wread:w;
complex Win Win_wselect:w;
complex Win Win_wtagwrite:w;
complex Win Win_ctlwrite:w;
complex Win Win_wdel:w;
complex Win Win_wname:w;
complex Win Win_wclean:w;
complex Win Win_wdormant:w;
complex Win Win_getec:w;
complex Win Win_geten:w;
complex Win Win_geter:w;
complex Win Win_wevent:w;
complex Event Win_wevent:e;
complex Win Win_wslave:w;
complex Event Win_wslave:ce;
complex Event Win_wslave:e;
complex Win Win_wwriteevent:w;
complex Event Win_wwriteevent:e;
complex Win Win_wreadall:w;
