1 /* "@(#)cdefs.h 4.2 08/17/82" */ 2 /* type modifiers */ 3 4 # define PTR 020 5 # define FTN 040 6 # define ARY 060 7 8 /* type packing constants */ 9 10 # define TMASK 060 11 # define TMASK1 0300 12 # define TMASK2 0360 13 # define BTMASK 017 14 # define BTSHIFT 4 15 # define TSHIFT 2 16 17 /* macros */ 18 19 # define BTYPE(x) (x&BTMASK) /* basic type of x */ 20 # define ISUNSIGNED(x) ((x)<=ULONG&&(x)>=UCHAR) 21 # define UNSIGNABLE(x) ((x)<=LONG&&(x)>=CHAR) 22 # define ENUNSIGN(x) ((x)+(UNSIGNED-INT)) 23 # define DEUNSIGN(x) ((x)+(INT-UNSIGNED)) 24 # define ISPTR(x) ((x&TMASK)==PTR) 25 # define ISFTN(x) ((x&TMASK)==FTN) /* is x a function type */ 26 # define ISARY(x) ((x&TMASK)==ARY) /* is x an array type */ 27 # define INCREF(x) (((x&~BTMASK)<<TSHIFT)|PTR|(x&BTMASK)) 28 # define DECREF(x) (((x>>TSHIFT)&~BTMASK&0x3fff)|(x&BTMASK)) 29 /* pack and unpack field descriptors (size and offset) */ 30 # define PKFIELD(s,o) ((o<<6)|s) 31 # define UPKFSZ(v) (v&077) 32 # define UPKFOFF(v) (v>>6) 33 34