/* varmac.h Copyright 1983, 1984, STSC Inc. Property of STSC */ /* Macros for defining variable structure */ /* and other data structures used by APL primitives */ /* Type definitions */ typedef char MENT; /* APL object Memory ENTry */ /* Assuming argument is MENT pointer to variable structure: */ #define length(VAR) (long *)(VAR) /* Leading length word of MENT */ #define refcount(VAR) (long *)((VAR)+4) /* Reference count word */ #define desc(VAR) (char *)((VAR)+10) /* Object Descriptor byte */ #define rank(VAR) (char *)((VAR)+11) /* Object Rank byte */ #define nelm(VAR) (long *)((VAR)+12) /* Number of Elements in object */ #define shape(VAR) (long *)((VAR)+16) /* Object shape, RHO of object */ #define tlength(VAR) (long *)((VAR)-4+*length((VAR))) /* Ending length word */ /* Universal start of data in MENT of unknown rank */ #define values(VAR) ((VAR)+16+4* *rank((VAR))) /* Values macro for object known to be a scalar */ #define valuess(VAR) ((VAR)+16) /* Values macro for object known to be a vector */ #define valuesv(VAR) ((VAR)+20) /* Values macro for object known to be a matrix */ #define valuesm(VAR) ((VAR)+24) /* Possible values of the descriptor byte: */ #define CHAR 0x00 /* Character data type */ #define BOOL 0x01 /* Boolean or bit data type */ #define INT 0x02 /* 32 bit Integer data type */ #define FLOAT 0x03 /* IEEE 8 byte floating point data type */ #define PTR 0x04 #define HET 0x05 /* Heterogeneous data type */ #define APV 0x06 /* Arithmetic Progression Vector, NOT SUPPORTED */ #define FUN 0x07 /* Function block data type */ /* Range of values for rank byte: */ #define MAXRANK 127 /* Maximum nelm for a variable: computed as (MAXINT/10)-WSMGROH (10 is bytes_per_elt of most voluminous datatype) 68000 (12 is bytes_per_elt of HP voluminous datatype) fixme */ #define MAXNELM 214748352 /* Ranges of 32-bit integer values */ #ifndef MAXINT #define MAXINT 0x7fffffff /* 2147483647 */ #endif #define MININT 0x80000000 /* -2147483648 */ /* Constants for storage management calculations: WS ManaGeR OverHead: extra size needed by wsmgr for freespace object */ #define WSMGROH 12 /* WS ManaGeR HeaD: leading space for fields used by wsmgr */ #define WSMGRHD 8