/*Copyright (C) 1992, 1995 by Thomas Glen Smith. All Rights Reserved.*/ /* execqnl APL2 V1.0.0 ************************************************* * Called from execmonq. System function quad_nl, name list. * ***********************************************************************/ #define INCLUDES APLCB+TREE #include "includes.h" #include "execqnli.h" Aplcb execqnl(left,rite) Aplcb left,rite; { Errinit; Errstop; Execqnls; Execqnlu; Temp; Vectin; extern int aplerr; struct nlparm p; extern Treelist treehdr; /* variable tree stack */ Treelist nexthdr,workhdr; int i,*ip; if (errinit()) return(errstop(0,left,rite,NULL)); if (left != NULL && (APLCHAR != left->aplflags & APLMASK || left->aplrank > 1)) return(errstop(111,left,rite,NULL)); rite = temp(vectin(rite)); /* ensure rite is integer vector */ if (aplerr) return(errstop(0,left,rite,NULL)); ip = rite->aplptr.aplint; i = rite->aplcount; p.lab = p.var = p.fun = 0; while (i--) switch (*ip++) { case 1: p.lab = 1; break; /* labels */ case 2: p.var = 2; break; /* variables */ case 3: p.fun = 3; break; /* functions */ default: return(errstop(117,left,rite,NULL)); } if (left == NULL) { p.delim = NULL; p.delen = 0; } else { p.delim = left->aplptr.aplchar; p.delen = left->aplcount; } p.outrows = p.outcols = 0; p.nlphdr = NULL; /* name stack */ nexthdr = (Treelist) treehdr; while (NULL != (workhdr = (Treelist) nexthdr)) { nexthdr = workhdr->treenext; /* next tree */ execqnls(workhdr->avlhdr,&p); } return(errstop(0,left,rite,execqnlu(&p))); }