aboutsummaryrefslogtreecommitdiff
path: root/main.acid
diff options
context:
space:
mode:
authorrgl <devnull@localhost>2020-02-03 22:42:28 +0100
committerrgl <devnull@localhost>2020-02-03 22:42:28 +0100
commit0373255087377122eeb10e006ffb8aa1b57e611c (patch)
tree33a4fafa4996fc2efa205b2973622c3fbd27f368 /main.acid
download3dee-0373255087377122eeb10e006ffb8aa1b57e611c.tar.gz
3dee-0373255087377122eeb10e006ffb8aa1b57e611c.tar.bz2
3dee-0373255087377122eeb10e006ffb8aa1b57e611c.zip
after a year or so of work, i dare create a proper repo.
Diffstat (limited to 'main.acid')
-rw-r--r--main.acid1153
1 files changed, 1153 insertions, 0 deletions
diff --git a/main.acid b/main.acid
new file mode 100644
index 0000000..67e14e0
--- /dev/null
+++ b/main.acid
@@ -0,0 +1,1153 @@
+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;