Metropoli BBS
VIEWER: aplcpyd.c MODE: TEXT (ASCII)
/*Copyright (C) 1992, 1995 by Thomas Glen Smith.  All Rights Reserved.*/
/* aplcpyd APL2 V1.0.0 *************************************************
* Called from aplcpyc when the object just copied was a group list,    *
* aplcpyd will copy all the items listed.                              *
***********************************************************************/
#define INCLUDES APLCB+APLFUNCI+APLMEM+TREE
#include "includes.h"
void aplcpyd(fromtree,rite,pcopy)
struct treelist *fromtree;	/* Root of tree to copy from. */
Aplcb rite;			/* APL variable, group list. */
int pcopy;				/* 0 = )copy, 1 = )pcopy. */
{
	Aplcpya; Aplname; Chrcopy; Execmsg; Namelen;
	extern int aplerr;
	char *cp,*s,*wrk;
	int cols,i,k,rows;

	if (0 == rite->aplcount)
		return; /* nothing to copy */
	if (rite->aplrank == 2) {
		rows = *(rite->apldim);
		cols = *(rite->apldim + 1);
	}
	else {
		rows = 1;
		cols = rite->aplcount;
	}
	wrk = malloc(cols+1); /* name buffer */
	if (wrk == NULL) return; /* out of memory */
	for (i = 0; i < rows; i++) { /* once for each row in list */
		if (0 == (k = namelen(rite->aplptr.aplchar,cols,i,&s)))
			execmsg(s,cols,cols,"not copied");
		else {
			cp = chrcopy(wrk,s,k,1); /* copy name */
			*cp = '\0'; /* delimit */
			aplcpya(fromtree,wrk,pcopy); /* copy into workspace */
		}
	}
	free(wrk);
}
[ RETURN TO DIRECTORY ]