Metropoli BBS
VIEWER: execexed.c MODE: TEXT (ASCII)
/* Copyright (C) 1993 by Thomas Glen Smith.  All Rights Reserved. */
/* execexed APL2 V1.0.0 ************************************************
* Called by execexec, execexej, execspeg,                              *
* to perform execute mainline processing.                              *
***********************************************************************/
#define INCLUDES APLCB+APLCHDEF+APLFUNCI+APLTOKEN+FUNSTRUC+STDIO+TREE
#include "includes.h"
void execexed()
{
     Execdyah; Execfree; Execmong; Execnext; Execspec; Lifo;
     extern Treelist treehdr;
     extern int aplerr;
     Apltoken axistok,op,tok;
     int noexit;

     axistok = tok = NULL;
     while (aplerr == 0) {
          noexit = execnext(&tok,&axistok,&op,NULL);
          if (aplerr) break;
          if (op) /* did execnext find any operands? */
               if (!execdyah(op)) break;
          if (axistok) {
               execmong(); /* do monadics on stack */
               axistok = lifo(&(treehdr->avlexec->avlfunst),axistok);
               axistok = NULL;
          }
          if (tok != NULL) {
          	if (!(tok->token_code == FUNCTION_TOKEN &&
               	((Codes *)(tok->token_ptr.token_function))->funky_code
                    == BASE_NULL))
	          	treehdr->lastfun = tok->token_code;
          	if (!execspec(&tok)) /* do monadics, assignment */
	               break; /* execexee/execspec said to quit */
          }
          if (!noexit) break; /* execnext said to quit */
     }
     execfree(axistok);
     execfree(tok);
     execmong(); /* do remaining monadics on stack */
}
[ RETURN TO DIRECTORY ]