/* Copyright (C) 1993 by Thomas Glen Smith. All Rights Reserved. */ /* funstrud.h - APL2 V1.0.0 ******************************************** * These structures are used to describe all the builtin APL functions. * * Funstrud is INCLUDEd by funstruc.h. * ***********************************************************************/ #if !defined(FUNSTRUD_INCL) #define FUNSTRUD_INCL typedef struct codes { int funky_code; /* function code, e.g. QUOTE_DOT, DIVIDE, etc. */ int funky_flags; /* SCALAR, etc. - see funcodes.h */ } Codes; typedef struct identities { int iid; double did; } Identities; typedef struct scalar_dyadic_procs { void (*ppint)(int*,int*,int*); void (*ppdbl)(double*,double*,double*); void (*ppmix)(double*,double*,int*); void (*ppchr)(char*,char*,int*); void (*ppcpx)(double*,double*,double*); void (*ppmpx)(double*,double*,int*); } Scalar_dyadic_procs; typedef struct scalar_dyadic_funcs { int (*epint)(int,int); double (*epdbl)(double,double); int (*epmix)(double,double); } Scalar_dyadic_funcs; typedef struct scalar_dyadics { Identities identities; Scalar_dyadic_procs procs; Scalar_dyadic_funcs funcs; } Scalar_dyadics; typedef struct scalar_monadic_funcs { int (*epint)(int); double (*epdbl)(double); int (*epmix)(double); } Scalar_monadic_funcs; typedef struct scalar_monadic_procs { void (*ppint)(int*,int*); void (*ppdbl)(double*,double*); void (*ppmix)(double*,int*); void (*ppcpx)(double*,double*); } Scalar_monadic_procs; typedef struct scalar_monadics { Scalar_monadic_procs procs; Scalar_monadic_funcs funcs; } Scalar_monadics; typedef union mixed_monadics { Aplcb (*epmix)(Aplcb); Aplcb (*epmixa)(Aplcb, int); /* with axis */ Aplcb (*epmixe)(Aplcb, Aplcb); /* with axes */ Aplcb (*epmixf)(Aplcb, double, Aplcb); /* ravel */ Aplcb (*epmixg)(Aplcb, int, Aplcb); /* selective specification */ } Mixed_monadics; typedef union mixed_dyadics { Aplcb (*epdix)(Aplcb, Aplcb); Aplcb (*epdixa)(Aplcb, Aplcb, int); /* with axis */ Aplcb (*epdixe)(Aplcb, Aplcb, Aplcb); /* with axes */ Aplcb (*epdixf)(Aplcb, Aplcb, Aplcb, Aplcb); /* sel. spec. */ Aplcb (*epdixg)(Aplcb, Aplcb, Aplcb, char *); /* pick w/selspec */ } Mixed_dyadics; #endif