Metropoli BBS
VIEWER: execmoni.c MODE: TEXT (ASCII)
/* Copyright (C) 1993 by Thomas Glen Smith.  All Rights Reserved. */
/* execmoni - APL2 V1.0.0 **********************************************
* Called from execmons to check for and obtain the entry point to a    *
* monadic function.                                                    *
***********************************************************************/
#define INCLUDES APLCB+APLDERIV+FUNCODES+FUNSTRUC
#include "includes.h"
int execmoni(fun,arg,pep)
void *fun; /* function description */
void **arg; /* possible function argument */
sub_dyad *pep; /* derived function entry point */
{
     Monfront;
     extern int aplerr;
     int code,ret;
     Scalar_monadics *smp=NULL;

     if (aplerr) return(NO_TYPE);
     code = ((Codes *)fun)->funky_flags;
     switch(code) {
          case SCMD: /* monadic scalars */
               *arg = &(((Scalars *)fun)->mona);
          case MSMD: /* monadic scalars not, roll */
               if (*arg == NULL) *arg = &(((Msmd *)fun)->mona);
               pep->moa = monfront;
               ret = MOA; /* monadic w/special argument */
               break;
          case MXMO: /* compute */
          case MIXD: /* shape, interval,... */
		case UPAR: /* first */
               pep->mon = ((Mixa *)fun)->mona.epmix;
               ret = MON;
               break;
          case MIXC: /* ravel */
               pep->mex = ((Mixa *)fun)->mona.epmixe;
               ret = MEX;
               break;
          case SAME: /* transpose, gradedn, gradeup */
			pep->dix = ((Dmxo *)fun)->dyad.epdix;
			ret = DIX; /* Aplcb ep(NULL, Aplcb) */
               break;
          case MIXF: /* circle-bar, reverse, default = first axis */
          case MIXL: /* circle-stile, reverse, default = last axis */
          case MIXA: /* ravel, enclose, disclose */
               pep->mox = ((Mixa *)fun)->mona.epmixa;
               ret = MOX;
               break;
          case MIXE: /* enclose */
          case MIXG: /* disclose */
          	pep->mex = ((Mixa *)fun)->mona.epmixe;
               ret = MEX;
               break;
          default:
          	ret = NO_TYPE;
               break;
     } /* end switch */
     return(ret);
}
[ RETURN TO DIRECTORY ]