Metropoli BBS
VIEWER: first.c MODE: TEXT (ASCII)
/* Copyright (C) 1993 by Thomas Glen Smith.	All Rights Reserved. */
/* first APL2 V1.0.0 ***************************************************
* Yields first item of rite.	If empty, yields the prototype.		 *
* Called from execmonj, nreduces.                                      *
***********************************************************************/
#define INCLUDES APLCB+STRING
#include "includes.h"
Aplcb first(rite)
Aplcb rite;
{
	Aplcopy; Errstop; First; Getcb; Iscalar; Take;
     extern int aplerr;
	Aplcb out;

	if (rite->aplcount)
     	if (rite->aplflags & APLAPL) {
          	out = aplcopy(*(rite->aplptr.aplapl));
               if (out != NULL)
               	out->aplflags |= APLTEMP;
          }
		else {
          	out = take(iscalar(1),rite);
          	rite = NULL;
     	}
	else switch(rite->aplflags & (APLMASK + APLAPL)) {
		case APLAPL:
			out = first(*(rite->aplptr.aplapl));
			break;
		case APLINT:
		case APLNUMB:
			out = iscalar(0);
			break;
		case APLCHAR:
			out = getcb(NULL, 1, APLCHAR + APLTEMP, 1, NULL);
			if (aplerr == 0)
				strcpy(out->aplptr.aplchar," ");
			break;
		default:
			out = NULL;
			aplerr = 999; /* internal error */
			break;
	}
	return(errstop(0,NULL,rite,out));
}
[ RETURN TO DIRECTORY ]