#include <perms.h>
// Edinburgh IMP77 Compiler - Version 8.4
//
// 1 %record %format %spec stackfm
// 2 %record %format boundfm(%integer lower, %integer upper, %integer mult)
struct BOUNDFM {
union {
struct {
int LOWER;
int UPPER;
int MULT;
};
};
};
// 3 %record %format afm(%integer dimension, %integer totalsize, %integer zerodisplacement, %integer dv, %integer localframe, %integer base, %record (boundfm) %array bound(1 : 7))
struct AFM {
union {
struct {
int DIMENSION;
int TOTALSIZE;
int ZERODISPLACEMENT;
int DV;
int LOCALFRAME;
int BASE;
struct BOUNDFM BOUND[7];
};
};
};
// 4 %constant %record (afm) %name atype == 0
const struct AFM *ATYPE = 0;
// 5 %record %format varfm(%integer flags, %byte %integer base, %byte %integer prim, %byte %integer type, %byte %integer form, (%long %real rvar %or %integer disp, (%integer extra %or %record (afm) %name adata)), (%integer format %or %integer scale), %integer area)
struct VARFM {
union {
struct {
int FLAGS;
unsigned char BASE;
unsigned char PRIM;
unsigned char TYPE;
unsigned char FORM;
union {
struct {
double RVAR;
};
struct {
int DISP;
union {
struct {
int EXTRA;
};
struct {
struct AFM *ADATA;
};
};
};
};
union {
struct {
int FORMAT;
};
struct {
int SCALE;
};
};
int AREA;
};
};
};
// 6 %record %format olfm(%integer oper, %record (stackfm) %name link)
struct OLFM {
union {
struct {
int OPER;
struct STACKFM *LINK;
};
};
};
// 7 %record %format xfm(%integer xsize, %record (stackfm) %name index)
struct XFM {
union {
struct {
int XSIZE;
struct STACKFM *INDEX;
};
};
};
// 8 %record %format datafm(%record (varfm) v, %integer varno, %record (varfm) %name fv, (%integer bias %or %byte %integer reg, %byte %integer label), %record (stackfm) %name params, %record (stackfm) %name record, (%integer oper, %record (stackfm) %name link %or %record (olfm) oplink), (%integer xsize, %record (stackfm) %name index %or %record (xfm) x))
struct DATAFM {
union {
struct {
struct VARFM V;
int VARNO;
struct VARFM *FV;
union {
struct {
int BIAS;
};
struct {
unsigned char REG;
unsigned char LABEL;
};
};
struct STACKFM *PARAMS;
struct STACKFM *RECORD;
union {
struct {
int OPER;
struct STACKFM *LINK;
};
struct {
struct OLFM OPLINK;
};
};
union {
struct {
int XSIZE;
struct STACKFM *INDEX;
};
struct {
struct XFM X;
};
};
};
};
};
// 9 %record %format memberfm(%integer const, %integer items, %record (stackfm) %name a, %record (stackfm) %name b, %record (memberfm) %name link)
struct MEMBERFM {
union {
struct {
int CONST;
int ITEMS;
struct STACKFM *A;
struct STACKFM *B;
struct MEMBERFM *LINK;
};
};
};
// 10 %constant %record (memberfm) %name memberfmtype == 0
const struct MEMBERFM *MEMBERFMTYPE = 0;
// 11 %record %format stackfm(%record (varfm) v %or %record (datafm) data %or %integer flags, %byte %integer base, %byte %integer prim, %byte %integer type, %byte %integer form, (%long %real rval %or %integer rhigh, %integer rlow %or (%integer disp, (%integer extra %or %record (afm) %name adata)), (%integer format %or %integer scale), %integer area, %integer varno, (%record (varfm) %name fv %or %record (memberfm) %name members), (%integer bias %or %byte %integer reg, %byte %integer label), %record (stackfm) %name params, %record (stackfm) %name record, (%integer oper, %record (stackfm) %name link %or %record (olfm) oplink), (%integer xsize, %record (stackfm) %name index %or %record (xfm) x)), %record (stackfm) %name using, %record (stackfm) %name stack)
struct STACKFM {
union {
struct {
struct VARFM V;
};
struct {
struct DATAFM DATA;
};
struct {
int FLAGS;
unsigned char BASE;
unsigned char PRIM;
unsigned char TYPE;
unsigned char FORM;
union {
struct {
double RVAL;
};
struct {
int RHIGH;
int RLOW;
};
struct {
union {
struct {
int DISP;
union {
struct {
int EXTRA;
};
struct {
struct AFM *ADATA;
};
};
};
};
union {
struct {
int FORMAT;
};
struct {
int SCALE;
};
};
int AREA;
int VARNO;
union {
struct {
struct VARFM *FV;
};
struct {
struct MEMBERFM *MEMBERS;
};
};
union {
struct {
int BIAS;
};
struct {
unsigned char REG;
unsigned char LABEL;
};
};
struct STACKFM *PARAMS;
struct STACKFM *RECORD;
union {
struct {
int OPER;
struct STACKFM *LINK;
};
struct {
struct OLFM OPLINK;
};
};
union {
struct {
int XSIZE;
struct STACKFM *INDEX;
};
struct {
struct XFM X;
};
};
};
};
struct STACKFM *USING;
struct STACKFM *STACK;
};
};
};
// 12 %constant %record (stackfm) %name stackfmtype == 0
const struct STACKFM *STACKFMTYPE = 0;
// 13 %record %format withfm(%integer key, %record (datafm) data, %record (withfm) %name link)
struct WITHFM {
union {
struct {
int KEY;
struct DATAFM DATA;
struct WITHFM *LINK;
};
};
};
// 14 %constant %record (withfm) %name withfmtype == 0
const struct WITHFM *WITHFMTYPE = 0;
// 15 %record %format workfm(%integer size, %integer displacement, %integer validity)
struct WORKFM {
union {
struct {
int SIZE;
int DISPLACEMENT;
int VALIDITY;
};
};
};
// 16 %end %of %file