shithub: 3dee

ref: a435467f81a1d9d429109f3a34988c642bed6035
dir: /main.acid/

View raw version
sizeof_1_ = 8;
aggr _1_
{
	'U' 0 lo;
	'U' 4 hi;
};

defn
_1_(addr) {
	complex _1_ addr;
	print("	lo	", addr.lo, "\n");
	print("	hi	", addr.hi, "\n");
};

sizeofFPdbleword = 8;
aggr FPdbleword
{
	'F' 0 x;
	{
	'U' 0 lo;
	'U' 4 hi;
	};
};

defn
FPdbleword(addr) {
	complex FPdbleword addr;
	print("	x	", addr.x, "\n");
	print("_1_ {\n");
		_1_(addr+0);
	print("}\n");
};

UTFmax = 4;
Runesync = 128;
Runeself = 128;
Runeerror = 65533;
Runemax = 1114111;
Runemask = 2097151;
sizeofFmt = 80;
aggr Fmt
{
	'b' 0 runes;
	'Y' 8 start;
	'Y' 16 to;
	'Y' 24 stop;
	'Y' 32 flush;
	'Y' 40 farg;
	'D' 48 nfmt;
	'Y' 56 args;
	'D' 64 r;
	'D' 68 width;
	'D' 72 prec;
	'U' 76 flags;
};

defn
Fmt(addr) {
	complex Fmt addr;
	print("	runes	", addr.runes, "\n");
	print("	start	", addr.start\Y, "\n");
	print("	to	", addr.to\Y, "\n");
	print("	stop	", addr.stop\Y, "\n");
	print("	flush	", addr.flush\Y, "\n");
	print("	farg	", addr.farg\Y, "\n");
	print("	nfmt	", addr.nfmt, "\n");
	print("	args	", addr.args\Y, "\n");
	print("	r	", addr.r, "\n");
	print("	width	", addr.width, "\n");
	print("	prec	", addr.prec, "\n");
	print("	flags	", addr.flags, "\n");
};

FmtWidth = 1;
FmtLeft = 2;
FmtPrec = 4;
FmtSharp = 8;
FmtSpace = 16;
FmtSign = 32;
FmtZero = 64;
FmtUnsigned = 128;
FmtShort = 256;
FmtLong = 512;
FmtVLong = 1024;
FmtComma = 2048;
FmtByte = 4096;
FmtFlag = 8192;
sizeofTm = 40;
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;
	'D' 36 tzoff;
};

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");
	print("	tzoff	", addr.tzoff, "\n");
};

PNPROC = 1;
PNGROUP = 2;
Profoff = 0;
Profuser = 1;
Profkernel = 2;
Proftime = 3;
Profsample = 4;
sizeofLock = 8;
aggr Lock
{
	'D' 0 val;
};

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

sizeofQLp = 16;
aggr QLp
{
	'D' 0 inuse;
	'D' 4 state;
	'A' QLp 8 next;
};

defn
QLp(addr) {
	complex QLp addr;
	print("	inuse	", addr.inuse, "\n");
	print("	state	", addr.state, "\n");
	print("	next	", addr.next\Y, "\n");
};

sizeofQLock = 32;
aggr QLock
{
	Lock 0 lock;
	'D' 8 locked;
	'A' QLp 16 $head;
	'A' QLp 24 $tail;
};

defn
QLock(addr) {
	complex QLock addr;
	print("Lock lock {\n");
	Lock(addr.lock);
	print("}\n");
	print("	locked	", addr.locked, "\n");
	print("	$head	", addr.$head\Y, "\n");
	print("	$tail	", addr.$tail\Y, "\n");
};

sizeofRWLock = 32;
aggr RWLock
{
	Lock 0 lock;
	'D' 8 readers;
	'D' 12 writer;
	'A' QLp 16 $head;
	'A' QLp 24 $tail;
};

defn
RWLock(addr) {
	complex RWLock addr;
	print("Lock lock {\n");
	Lock(addr.lock);
	print("}\n");
	print("	readers	", addr.readers, "\n");
	print("	writer	", addr.writer, "\n");
	print("	$head	", addr.$head\Y, "\n");
	print("	$tail	", addr.$tail\Y, "\n");
};

sizeofRendez = 24;
aggr Rendez
{
	'A' QLock 0 l;
	'A' QLp 8 $head;
	'A' QLp 16 $tail;
};

defn
Rendez(addr) {
	complex Rendez addr;
	print("	l	", addr.l\Y, "\n");
	print("	$head	", addr.$head\Y, "\n");
	print("	$tail	", addr.$tail\Y, "\n");
};

sizeofNetConnInfo = 72;
aggr NetConnInfo
{
	'Y' 0 dir;
	'Y' 8 root;
	'Y' 16 spec;
	'Y' 24 lsys;
	'Y' 32 lserv;
	'Y' 40 rsys;
	'Y' 48 rserv;
	'Y' 56 laddr;
	'Y' 64 raddr;
};

defn
NetConnInfo(addr) {
	complex NetConnInfo addr;
	print("	dir	", addr.dir\Y, "\n");
	print("	root	", addr.root\Y, "\n");
	print("	spec	", addr.spec\Y, "\n");
	print("	lsys	", addr.lsys\Y, "\n");
	print("	lserv	", addr.lserv\Y, "\n");
	print("	rsys	", addr.rsys\Y, "\n");
	print("	rserv	", addr.rserv\Y, "\n");
	print("	laddr	", addr.laddr\Y, "\n");
	print("	raddr	", addr.raddr\Y, "\n");
};

RFNAMEG = 1;
RFENVG = 2;
RFFDG = 4;
RFNOTEG = 8;
RFPROC = 16;
RFMEM = 32;
RFNOWAIT = 64;
RFCNAMEG = 1024;
RFCENVG = 2048;
RFCFDG = 4096;
RFREND = 8192;
RFNOMNT = 16384;
sizeofQid = 16;
aggr Qid
{
	'W' 0 path;
	'U' 8 vers;
	'b' 12 type;
};

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

sizeofDir = 80;
aggr Dir
{
	'u' 0 type;
	'U' 4 dev;
	Qid 8 qid;
	'U' 24 mode;
	'U' 28 atime;
	'U' 32 mtime;
	'V' 40 length;
	'Y' 48 name;
	'Y' 56 uid;
	'Y' 64 gid;
	'Y' 72 muid;
};

defn
Dir(addr) {
	complex Dir addr;
	print("	type	", addr.type, "\n");
	print("	dev	", addr.dev, "\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("	length	", addr.length, "\n");
	print("	name	", addr.name\Y, "\n");
	print("	uid	", addr.uid\Y, "\n");
	print("	gid	", addr.gid\Y, "\n");
	print("	muid	", addr.muid\Y, "\n");
};

sizeofWaitmsg = 24;
aggr Waitmsg
{
	'D' 0 pid;
	'a' 4 time;
	'Y' 16 msg;
};

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

sizeofIOchunk = 16;
aggr IOchunk
{
	'Y' 0 addr;
	'U' 8 len;
};

defn
IOchunk(addr) {
	complex IOchunk addr;
	print("	addr	", addr.addr\Y, "\n");
	print("	len	", addr.len, "\n");
};

Nqwds = 2;
Nqshift = 5;
Nqmask = -1;
Nqbits = 64;
sizeofChannel = 48;
aggr Channel
{
	'D' 0 s;
	'U' 4 f;
	'U' 8 n;
	'D' 12 e;
	'D' 16 freed;
	'Y' 24 qentry;
	'D' 32 nentry;
	'D' 36 closed;
	'a' 40 v;
};

defn
Channel(addr) {
	complex Channel addr;
	print("	s	", addr.s, "\n");
	print("	f	", addr.f, "\n");
	print("	n	", addr.n, "\n");
	print("	e	", addr.e, "\n");
	print("	freed	", addr.freed, "\n");
	print("	qentry	", addr.qentry\Y, "\n");
	print("	nentry	", addr.nentry, "\n");
	print("	closed	", addr.closed, "\n");
	print("	v	", addr.v, "\n");
};

CHANEND = 0;
CHANSND = 1;
CHANRCV = 2;
CHANNOP = 3;
CHANNOBLK = 4;
sizeofAlt = 48;
aggr Alt
{
	'A' Channel 0 c;
	'Y' 8 v;
	'D' 16 op;
	'Y' 24 err;
	'A' Channel 32 tag;
	'D' 40 entryno;
};

defn
Alt(addr) {
	complex Alt addr;
	print("	c	", addr.c\Y, "\n");
	print("	v	", addr.v\Y, "\n");
	print("	op	", addr.op, "\n");
	print("	err	", addr.err\Y, "\n");
	print("	tag	", addr.tag\Y, "\n");
	print("	entryno	", addr.entryno, "\n");
};

sizeofRef = 8;
aggr Ref
{
	'D' 0 ref;
};

defn
Ref(addr) {
	complex Ref addr;
	print("	ref	", addr.ref, "\n");
};

DOpaque = 4294967295;
DTransparent = 0;
DBlack = 255;
DWhite = 4294967295;
DRed = 4278190335;
DGreen = 16711935;
DBlue = 65535;
DCyan = 16777215;
DMagenta = 4278255615;
DYellow = 4294902015;
DPaleyellow = 4294945535;
DDarkyellow = 4008615679;
DDarkgreen = 1149781247;
DPalegreen = 2868882175;
DMedgreen = 2295105791;
DDarkblue = 22015;
DPalebluegreen = 2868903935;
DPaleblue = 48127;
DBluegreen = 8947967;
DGreygreen = 1437248255;
DPalegreygreen = 2666458879;
DYellowgreen = 2576960767;
DMedblue = 39423;
DGreyblue = 6142975;
DPalegreyblue = 1234427391;
DPurpleblue = 2290666751;
DNotacolor = 4294967040;
DNofill = 4294967040;
Displaybufsize = 8000;
ICOSSCALE = 1024;
Borderwidth = 4;
Refbackup = 0;
Refnone = 1;
Refmesg = 2;
Endsquare = 0;
Enddisc = 1;
Endarrow = 2;
Endmask = 31;
Clear = 0;
SinD = 8;
DinS = 4;
SoutD = 2;
DoutS = 1;
S = 10;
SoverD = 11;
SatopD = 9;
SxorD = 3;
D = 5;
DoverS = 7;
DatopS = 6;
DxorS = 3;
Ncomp = 12;
CRed = 0;
CGreen = 1;
CBlue = 2;
CGrey = 3;
CAlpha = 4;
CMap = 5;
CIgnore = 6;
NChan = 7;
GREY1 = 49;
GREY2 = 50;
GREY4 = 52;
GREY8 = 56;
CMAP8 = 88;
RGB15 = 1627723045;
RGB16 = 333349;
RGB24 = 530472;
RGBA32 = 135800904;
ARGB32 = 1208490024;
XRGB32 = 1745360936;
BGR24 = 2627592;
ABGR32 = 1210587144;
XBGR32 = 1747458056;
sizeofPoint = 8;
aggr Point
{
	'D' 0 x;
	'D' 4 y;
};

defn
Point(addr) {
	complex Point addr;
	print("	x	", addr.x, "\n");
	print("	y	", addr.y, "\n");
};

sizeofRectangle = 16;
aggr Rectangle
{
	Point 0 min;
	Point 8 max;
};

defn
Rectangle(addr) {
	complex Rectangle addr;
	print("Point min {\n");
	Point(addr.min);
	print("}\n");
	print("Point max {\n");
	Point(addr.max);
	print("}\n");
};

sizeofScreen = 32;
aggr Screen
{
	'Y' 0 display;
	'D' 8 id;
	'Y' 16 image;
	'Y' 24 fill;
};

defn
Screen(addr) {
	complex Screen addr;
	print("	display	", addr.display\Y, "\n");
	print("	id	", addr.id, "\n");
	print("	image	", addr.image\Y, "\n");
	print("	fill	", addr.fill\Y, "\n");
};

sizeofDisplay = 264;
aggr Display
{
	QLock 0 qlock;
	'D' 32 locking;
	'D' 36 dirno;
	'D' 40 fd;
	'D' 44 reffd;
	'D' 48 ctlfd;
	'D' 52 imageid;
	'D' 56 $local;
	'Y' 64 error;
	'Y' 72 devdir;
	'Y' 80 windir;
	'a' 88 oldlabel;
	'U' 152 dataqid;
	'Y' 160 white;
	'Y' 168 black;
	'Y' 176 opaque;
	'Y' 184 transparent;
	'Y' 192 image;
	'Y' 200 buf;
	'D' 208 bufsize;
	'Y' 216 bufp;
	'Y' 224 defaultfont;
	'Y' 232 defaultsubfont;
	'Y' 240 windows;
	'Y' 248 screenimage;
	'D' 256 _isnewdisplay;
};

defn
Display(addr) {
	complex Display addr;
	print("QLock qlock {\n");
	QLock(addr.qlock);
	print("}\n");
	print("	locking	", addr.locking, "\n");
	print("	dirno	", addr.dirno, "\n");
	print("	fd	", addr.fd, "\n");
	print("	reffd	", addr.reffd, "\n");
	print("	ctlfd	", addr.ctlfd, "\n");
	print("	imageid	", addr.imageid, "\n");
	print("	$local	", addr.$local, "\n");
	print("	error	", addr.error\Y, "\n");
	print("	devdir	", addr.devdir\Y, "\n");
	print("	windir	", addr.windir\Y, "\n");
	print("	oldlabel	", addr.oldlabel, "\n");
	print("	dataqid	", addr.dataqid, "\n");
	print("	white	", addr.white\Y, "\n");
	print("	black	", addr.black\Y, "\n");
	print("	opaque	", addr.opaque\Y, "\n");
	print("	transparent	", addr.transparent\Y, "\n");
	print("	image	", addr.image\Y, "\n");
	print("	buf	", addr.buf\Y, "\n");
	print("	bufsize	", addr.bufsize, "\n");
	print("	bufp	", addr.bufp\Y, "\n");
	print("	defaultfont	", addr.defaultfont\Y, "\n");
	print("	defaultsubfont	", addr.defaultsubfont\Y, "\n");
	print("	windows	", addr.windows\Y, "\n");
	print("	screenimage	", addr.screenimage\Y, "\n");
	print("	_isnewdisplay	", addr._isnewdisplay, "\n");
};

sizeofImage = 80;
aggr Image
{
	'A' Display 0 display;
	'D' 8 id;
	Rectangle 16 r;
	Rectangle 32 clipr;
	'D' 48 depth;
	'U' 52 chan;
	'D' 56 repl;
	'A' Screen 64 screen;
	'A' Image 72 next;
};

defn
Image(addr) {
	complex Image addr;
	print("	display	", addr.display\Y, "\n");
	print("	id	", addr.id, "\n");
	print("Rectangle r {\n");
	Rectangle(addr.r);
	print("}\n");
	print("Rectangle clipr {\n");
	Rectangle(addr.clipr);
	print("}\n");
	print("	depth	", addr.depth, "\n");
	print("	chan	", addr.chan, "\n");
	print("	repl	", addr.repl, "\n");
	print("	screen	", addr.screen\Y, "\n");
	print("	next	", addr.next\Y, "\n");
};

sizeofRGB = 16;
aggr RGB
{
	'U' 0 red;
	'U' 4 green;
	'U' 8 blue;
};

defn
RGB(addr) {
	complex RGB addr;
	print("	red	", addr.red, "\n");
	print("	green	", addr.green, "\n");
	print("	blue	", addr.blue, "\n");
};

sizeofFontchar = 8;
aggr Fontchar
{
	'D' 0 x;
	'b' 4 top;
	'b' 5 bottom;
	'C' 6 left;
	'b' 7 width;
};

defn
Fontchar(addr) {
	complex Fontchar addr;
	print("	x	", addr.x, "\n");
	print("	top	", addr.top, "\n");
	print("	bottom	", addr.bottom, "\n");
	print("	left	", addr.left, "\n");
	print("	width	", addr.width, "\n");
};

sizeofSubfont = 40;
aggr Subfont
{
	'Y' 0 name;
	'd' 8 n;
	'b' 10 height;
	'C' 11 ascent;
	'A' Fontchar 16 info;
	'A' Image 24 bits;
	'D' 32 ref;
};

defn
Subfont(addr) {
	complex Subfont addr;
	print("	name	", addr.name\Y, "\n");
	print("	n	", addr.n, "\n");
	print("	height	", addr.height, "\n");
	print("	ascent	", addr.ascent, "\n");
	print("	info	", addr.info\Y, "\n");
	print("	bits	", addr.bits\Y, "\n");
	print("	ref	", addr.ref, "\n");
};

LOG2NFCACHE = 6;
NFCACHE = 64;
NFLOOK = 5;
NFSUBF = 2;
MAXFCACHE = 1029;
MAXSUBF = 50;
DSUBF = 4;
SUBFAGE = 10000;
CACHEAGE = 10000;
sizeofCachefont = 32;
aggr Cachefont
{
	'U' 0 min;
	'U' 4 max;
	'D' 8 offset;
	'Y' 16 name;
	'Y' 24 subfontname;
};

defn
Cachefont(addr) {
	complex Cachefont addr;
	print("	min	", addr.min, "\n");
	print("	max	", addr.max, "\n");
	print("	offset	", addr.offset, "\n");
	print("	name	", addr.name\Y, "\n");
	print("	subfontname	", addr.subfontname\Y, "\n");
};

sizeofCacheinfo = 16;
aggr Cacheinfo
{
	'u' 0 x;
	'b' 2 width;
	'C' 3 left;
	'U' 4 value;
	'u' 8 age;
};

defn
Cacheinfo(addr) {
	complex Cacheinfo addr;
	print("	x	", addr.x, "\n");
	print("	width	", addr.width, "\n");
	print("	left	", addr.left, "\n");
	print("	value	", addr.value, "\n");
	print("	age	", addr.age, "\n");
};

sizeofCachesubf = 24;
aggr Cachesubf
{
	'U' 0 age;
	'A' Cachefont 8 cf;
	'A' Subfont 16 f;
};

defn
Cachesubf(addr) {
	complex Cachesubf addr;
	print("	age	", addr.age, "\n");
	print("	cf	", addr.cf\Y, "\n");
	print("	f	", addr.f\Y, "\n");
};

sizeofFont = 72;
aggr Font
{
	'Y' 0 name;
	'A' Display 8 display;
	'd' 16 height;
	'd' 18 ascent;
	'd' 20 width;
	'd' 22 nsub;
	'U' 24 age;
	'D' 28 maxdepth;
	'D' 32 ncache;
	'D' 36 nsubf;
	'A' Cacheinfo 40 cache;
	'A' Cachesubf 48 subf;
	'A' Cachefont 56 sub;
	'A' Image 64 cacheimage;
};

defn
Font(addr) {
	complex Font addr;
	print("	name	", addr.name\Y, "\n");
	print("	display	", addr.display\Y, "\n");
	print("	height	", addr.height, "\n");
	print("	ascent	", addr.ascent, "\n");
	print("	width	", addr.width, "\n");
	print("	nsub	", addr.nsub, "\n");
	print("	age	", addr.age, "\n");
	print("	maxdepth	", addr.maxdepth, "\n");
	print("	ncache	", addr.ncache, "\n");
	print("	nsubf	", addr.nsubf, "\n");
	print("	cache	", addr.cache\Y, "\n");
	print("	subf	", addr.subf\Y, "\n");
	print("	sub	", addr.sub\Y, "\n");
	print("	cacheimage	", addr.cacheimage\Y, "\n");
};

complex Point ZP;
complex Rectangle ZR;
complex Display display;
complex Font font;
complex Image screen;
complex Screen _screen;
sizeofMouse = 24;
aggr Mouse
{
	'D' 0 buttons;
	Point 8 xy;
	'U' 16 msec;
};

defn
Mouse(addr) {
	complex Mouse addr;
	print("	buttons	", addr.buttons, "\n");
	print("Point xy {\n");
	Point(addr.xy);
	print("}\n");
	print("	msec	", addr.msec, "\n");
};

sizeofMousectl = 72;
aggr Mousectl
{
	{
	'D' 0 buttons;
	Point 8 xy;
	'U' 16 msec;
	};
	'A' Channel 24 c;
	'A' Channel 32 resizec;
	'Y' 40 file;
	'D' 48 mfd;
	'D' 52 cfd;
	'D' 56 pid;
	'A' Image 64 image;
};

defn
Mousectl(addr) {
	complex Mousectl addr;
	print("Mouse {\n");
		Mouse(addr+0);
	print("}\n");
	print("	c	", addr.c\Y, "\n");
	print("	resizec	", addr.resizec\Y, "\n");
	print("	file	", addr.file\Y, "\n");
	print("	mfd	", addr.mfd, "\n");
	print("	cfd	", addr.cfd, "\n");
	print("	pid	", addr.pid, "\n");
	print("	image	", addr.image\Y, "\n");
};

sizeofMenu = 24;
aggr Menu
{
	'Y' 0 item;
	'Y' 8 gen;
	'D' 16 lasthit;
};

defn
Menu(addr) {
	complex Menu addr;
	print("	item	", addr.item\Y, "\n");
	print("	gen	", addr.gen\Y, "\n");
	print("	lasthit	", addr.lasthit, "\n");
};

sizeofKeyboardctl = 32;
aggr Keyboardctl
{
	'A' Channel 0 c;
	'Y' 8 file;
	'D' 16 consfd;
	'D' 20 ctlfd;
	'D' 24 pid;
};

defn
Keyboardctl(addr) {
	complex Keyboardctl addr;
	print("	c	", addr.c\Y, "\n");
	print("	file	", addr.file\Y, "\n");
	print("	consfd	", addr.consfd, "\n");
	print("	ctlfd	", addr.ctlfd, "\n");
	print("	pid	", addr.pid, "\n");
};

KF = 61440;
Spec = 63488;
PF = 63520;
Kview = 63488;
Khome = 61453;
Kup = 61454;
Kdown = 63488;
Kpgup = 61455;
Kprint = 61456;
Kleft = 61457;
Kright = 61458;
Kpgdown = 61459;
Kins = 61460;
Kalt = 61461;
Kshift = 61462;
Kctl = 61463;
Kend = 61464;
Kscroll = 61465;
Kscrolloneup = 61472;
Kscrollonedown = 61473;
Ksoh = 1;
Kstx = 2;
Ketx = 3;
Keof = 4;
Kenq = 5;
Kack = 6;
Kbs = 8;
Knack = 21;
Ketb = 23;
Kdel = 127;
Kesc = 27;
Kbreak = 63585;
Kcaps = 63588;
Knum = 63589;
Kmiddle = 63590;
Kaltgr = 63591;
Kmouse = 63744;
sizeofPoint2 = 24;
aggr Point2
{
	'F' 0 x;
	'F' 8 y;
	'F' 16 w;
};

defn
Point2(addr) {
	complex Point2 addr;
	print("	x	", addr.x, "\n");
	print("	y	", addr.y, "\n");
	print("	w	", addr.w, "\n");
};

sizeofPoint3 = 32;
aggr Point3
{
	'F' 0 x;
	'F' 8 y;
	'F' 16 z;
	'F' 24 w;
};

defn
Point3(addr) {
	complex Point3 addr;
	print("	x	", addr.x, "\n");
	print("	y	", addr.y, "\n");
	print("	z	", addr.z, "\n");
	print("	w	", addr.w, "\n");
};

sizeofQuaternion = 32;
aggr Quaternion
{
	'F' 0 r;
	'F' 8 i;
	'F' 16 j;
	'F' 24 k;
};

defn
Quaternion(addr) {
	complex Quaternion addr;
	print("	r	", addr.r, "\n");
	print("	i	", addr.i, "\n");
	print("	j	", addr.j, "\n");
	print("	k	", addr.k, "\n");
};

sizeofReferenceFrame = 72;
aggr ReferenceFrame
{
	Point2 0 p;
	Point2 24 xb;
	Point2 48 yb;
};

defn
ReferenceFrame(addr) {
	complex ReferenceFrame addr;
	print("Point2 p {\n");
	Point2(addr.p);
	print("}\n");
	print("Point2 xb {\n");
	Point2(addr.xb);
	print("}\n");
	print("Point2 yb {\n");
	Point2(addr.yb);
	print("}\n");
};

sizeofReferenceFrame3 = 128;
aggr ReferenceFrame3
{
	Point3 0 p;
	Point3 32 xb;
	Point3 64 yb;
	Point3 96 zb;
};

defn
ReferenceFrame3(addr) {
	complex ReferenceFrame3 addr;
	print("Point3 p {\n");
	Point3(addr.p);
	print("}\n");
	print("Point3 xb {\n");
	Point3(addr.xb);
	print("}\n");
	print("Point3 yb {\n");
	Point3(addr.yb);
	print("}\n");
	print("Point3 zb {\n");
	Point3(addr.zb);
	print("}\n");
};

sizeofTriangle3 = 96;
aggr Triangle3
{
	Point3 0 p0;
	Point3 32 p1;
	Point3 64 p2;
};

defn
Triangle3(addr) {
	complex Triangle3 addr;
	print("Point3 p0 {\n");
	Point3(addr.p0);
	print("}\n");
	print("Point3 p1 {\n");
	Point3(addr.p1);
	print("}\n");
	print("Point3 p2 {\n");
	Point3(addr.p2);
	print("}\n");
};

Portho = 0;
Ppersp = 1;
sizeofVertex = 64;
aggr Vertex
{
	Point3 0 p;
	Point3 32 n;
};

defn
Vertex(addr) {
	complex Vertex addr;
	print("Point3 p {\n");
	Point3(addr.p);
	print("}\n");
	print("Point3 n {\n");
	Point3(addr.n);
	print("}\n");
};

sizeofTriangle = 24;
aggr Triangle
{
	Point 0 p0;
	Point 8 p1;
	Point 16 p2;
};

defn
Triangle(addr) {
	complex Triangle addr;
	print("Point p0 {\n");
	Point(addr.p0);
	print("}\n");
	print("Point p1 {\n");
	Point(addr.p1);
	print("}\n");
	print("Point p2 {\n");
	Point(addr.p2);
	print("}\n");
};

sizeof_2_ = 16;
aggr _2_
{
	'F' 0 n;
	'F' 8 f;
};

defn
_2_(addr) {
	complex _2_ addr;
	print("	n	", addr.n, "\n");
	print("	f	", addr.f, "\n");
};

sizeofCamera = 296;
aggr Camera
{
	{
	Point3 0 p;
	Point3 32 xb;
	Point3 64 yb;
	Point3 96 zb;
	};
	'A' Image 128 viewport;
	'F' 136 fov;
	_2_ 144 clip;
	'D' 160 ptype;
	'a' 168 proj;
};

defn
Camera(addr) {
	complex Camera addr;
	print("ReferenceFrame3 {\n");
		ReferenceFrame3(addr+0);
	print("}\n");
	print("	viewport	", addr.viewport\Y, "\n");
	print("	fov	", addr.fov, "\n");
	print("_2_ clip {\n");
	_2_(addr.clip);
	print("}\n");
	print("	ptype	", addr.ptype, "\n");
	print("	proj	", addr.proj, "\n");
};

STACK = 8192;
SEC = 1000;
FPS = 60;
Scamno = 0;
Scampos = 1;
Scambs = 2;
Sfov = 3;
Se = 4;
complex Mousectl mctl;
complex Keyboardctl kctl;
complex ReferenceFrame scrrf;
complex RWLock worldlock;
complex Triangle3 tri;
complex Camera cam0;
complex Camera cam1;
complex Camera cam2;
complex Camera cam3;
complex Camera maincam;
complex Fmt vfmt:f;
complex Point2 vfmt:p;
complex Fmt Vfmt:f;
complex Point3 Vfmt:p;
complex Point3 flatten:p;
complex Point2 toscreen:p;
complex Point fromscreen:p;
complex Triangle redraw:trit;
complex Quaternion key:q;
complex Quaternion key:qtmp;
MOUSE = 0;
KBD = 1;
RESIZE = 2;