/*Copyright (C) 1992, 1995 by Thomas Glen Smith. All Rights Reserved.*/ /* aplcpy APL2 V1.0.0 ************************************************** * Called from aplwksp to do )COPY. * ***********************************************************************/ #define MAXNAME 130 #define INCLUDES APLCB+APLTOKEN+STDIO+STRING+TREE #include "includes.h" void aplcpy(rite,cp,cpend,pcopy) Aplcb rite; /* Aplcb for command text. */ char *cp; /* Pointer to char after )COPY in command text. */ char *cpend; /* Pointer to end of command text. */ int pcopy; /* 0 = )copy, 1 = )pcopy. */ { Aplclean; Aplcpya; Aplcpyb; Aplloae; Execpars; Execpop; extern int aplerr; extern char *aplfile; char *savfile; extern double fuzz; double savfuzz; extern int indxorg; int savxorg; extern void *treehdr; void *savtree; Apltoken tok,tokhdr; char name[MAXNAME]; Treelist fromtree,totree; savfile = aplfile; aplfile = NULL; savfuzz = fuzz; savtree = treehdr; treehdr = NULL; savxorg = indxorg; sscanf(cp,"%s",name); /* carve out file name */ if (aplloae(rite->aplptr.aplchar,name,name+strlen(name))) { for (totree = savtree; totree->treenext != NULL; totree = totree->treenext); /* find bottom of stack */ fromtree = treehdr; /* tree to copy from */ treehdr = totree; /* setup to copy to trunk, i.e. global */ cp += strlen(name); /* bump past file name in command buffer */ for (tok = tokhdr = execpars(cp,cpend-cp); tok != NULL && aplerr == 0; tok = tok->token_queue.token_next_ptr) if (tok->token_code != OPERAND_TOKEN) aplerr = 58; /* syntax error */ else /* copy one object */ aplcpya(fromtree,tok->token_ptr.token_string,pcopy); if (tokhdr == NULL) aplcpyb(fromtree,fromtree->avlhdr,pcopy); /* copy all */ treehdr = fromtree; /* restore for cleanup */ } aplclean(); /* clean out loaded workspace */ aplfile = savfile; fuzz = savfuzz; treehdr = savtree; savxorg = indxorg; execpop(&tokhdr); /* pop and free tokens on stack */ }