/*Copyright (C) 1992, 1995 by Thomas Glen Smith. All Rights Reserved.*/
/* imonadic APL2 V1.0.0 ************************************************
* Called by drop and transpot. The integer equivalent of monadic. *
***********************************************************************/
#define INCLUDES APLCB
#include "includes.h"
Aplcb imonadic(oper,rite)
int (*oper)(); /* operator */
Aplcb rite; /* operand */
{
Getcb; Errinit; Errstop; Intcopy; Integer;
extern int aplerr;
int *dataout,*datarite,*dimptr,*dimrite,i;
Aplcb out;
if (errinit())
return(errstop(0,NULL,rite,NULL));
if (!(rite->aplflags & APLINT)) {
rite=integer(rite);
if (aplerr)
return(NULL);
}
out = getcb(NULL,rite->aplcount,APLINT+APLTEMP,rite->aplrank,NULL);
if (out == NULL)
return(errstop(0,NULL,rite,NULL));
if (!out->aplcount)
return(errstop(0,NULL,rite,out));
if (out->aplrank>1)
dimptr = intcopy(out->apldim,rite->apldim,out->aplrank,1);
dataout = out->aplptr.aplint;
datarite = rite->aplptr.aplint;
for (i = out->aplcount; i > 0; i--)
*dataout++ = (*oper)(*datarite++);
return(errstop(0,NULL,rite,out));
}