Metropoli BBS
VIEWER: takeit.c MODE: TEXT (ASCII)
/* Copyright (C) 1993 by Thomas Glen Smith.	All Rights Reserved. */
/* takeit APL2 V1.0.0 **************************************************
* Takeit is called from both take and drop after initial processing	 *
* and error checking has been done.  Takeit does the take operation.	 *
***********************************************************************/
#define INCLUDES APLCB
#include "includes.h"
#include "takeincl.h"
Aplcb takeit(left,rite)
Aplcb left,rite;
{
	Dtacopy; Endoper; Errstop; Takefill; Takepset; Takesub; Temp;
	Aplcb out;
	struct takeparm p;
	int tempsave;
	char *cp;

	tempsave = rite->aplflags & APLTEMP;
	if (tempsave)
		rite->aplflags -= APLTEMP; /* temporarily permanent */
	p.pilvl = p.polvl = NULL; /* takepset will store here */
	out = takepset(left,rite,&p);
	if (out != NULL && out->aplcount)
		if (out->aplrank)
			takesub(0,&p);
		else {
			cp = (rite->aplcount) ? rite->aplptr.aplchar : takefill(&p);
			dtacopy(out->aplptr.aplchar,cp,1,1,p.ptype);
		}
	if (p.pilvl != NULL)
		endoper(temp(p.pilvl));
	if (p.polvl != NULL)
		endoper(temp(p.polvl));
	if (p.aplfill != NULL)
		endoper(temp(p.aplfill));
	rite->aplflags += tempsave; /* restore temporary flag, maybe */
	return(errstop(0,temp(left),rite,out));
}
[ RETURN TO DIRECTORY ]