/* Copyright (C) 1994 by Thomas Glen Smith. All Rights Reserved. */ /* indexgen APL2 V1.0.0 ************************************************ * For positive integer argument N, produces a vector of length N * * containing the first N integers in order, beginning with the value * * in indxorg. Indexgen expects the argument to be a pointer to an * * aplcb describing the integer N. * ***********************************************************************/ #define INCLUDES APLCB #include "includes.h" Aplcb indexgen(rite) Aplcb rite; { Errinit; Errstop; Indxsub; Ivalue; Mod; extern int aplerr; extern double fuzz; int datatyp,i; double dbl; for (;;) { if (errinit()) break; if (rite->aplcount != 1) break; if (0 == (i=rite->aplflags & (APLINT + APLNUMB))) break; if (i == APLINT) i = ivalue(rite); else { /* datatype is APLNUMB */ if (0.0 > (dbl = *(rite->aplptr.apldata))) if (-fuzz > dbl) break; else i = 0; else if (mod(dbl,1.0) > fuzz) break; else i = dbl; endoper(rite); } if (i < 0) break; /* m/b positive integer */ return(indxsub(i)); } return(errstop(45,NULL,rite,NULL)); }