#define ALLOC(x) (struct x *) ckalloc(sizeof(struct x))
/* control stack codes */
/* INTRINSIC function codes*/
/* I/O statement codes */
#define MSKLOGICAL M(TYLOGICAL)
#define MSKADDR M(TYADDR)
#define MSKCHAR M(TYCHAR)
#define MSKINT M(TYSHORT)|M(TYLONG)
#define MSKREAL M(TYREAL)|M(TYDREAL)
#define MSKCOMPLEX M(TYCOMPLEX)|M(TYDCOMPLEX)
/* miscellaneous macros */
#define ONEOF(x,y) (M(x) & (y))
#define ISCOMPLEX(z) ONEOF(z, MSKCOMPLEX)
#define ISREAL(z) ONEOF(z, MSKREAL)
#define ISNUMERIC(z) ONEOF(z, MSKINT|MSKREAL|MSKCOMPLEX)
#define ISICON(z) (z->tag==TCONST && ISINT(z->vtype))
#define ISCHAR(z) (z->vtype==TYCHAR)
#define ISINT(z) ONEOF(z, MSKINT)
#define ISCONST(z) (z->tag==TCONST)
#define ISERROR(z) (z->tag==TERROR)
#define ISPLUSOP(z) (z->tag==TEXPR && z->opcode==OPPLUS)
#define ISSTAROP(z) (z->tag==TEXPR && z->opcode==OPSTAR)
#define ISONE(z) (ISICON(z) && z->const.ci==1)
#define INT(z) ONEOF(z, MSKINT|MSKCHAR)
#define ICON(z) mkintcon( (ftnint)(z) )
#define CHCON(z) mkstrcon(strlen(z), z)
/* round a up to a multiple of b */
#define roundup(a,b) ( b * ( (a+b-1)/b) )