Metropoli BBS
VIEWER: lovfsfp.c MODE: TEXT (ASCII)
/*Copyright (C) 1992, 1996 by Thomas Glen Smith.  All Rights Reserved.*/
/* lovfsfp APL2 V1.0.0 *************************************************
* Called from lovfsfn to read a function definition during a )load.    *
***********************************************************************/
#define INCLUDES APLCB+APLFUNCI+APLTOKEN+IO+STDIO+STRING
#include "includes.h"
Aplfunc lovfsfp(fp,func,j)
int fp;		/* File descriptor handle */
Aplfunc func;	/* Memory allocated for function stucture */
int j;		/* Size of token array pointed to by functary */
{
	Lovfsfo; Offtptr;
	Apltoken cur,tok,*tokhdr;
	int i,k;

	i = read(fp, &k, sizeof(k)); /* Read offset to name token, */
	func->funcname = (Apltoken)offtptr((char *)(func->functary), k);
	i = read(fp, func->functary, j); /* read array of tokens */
	tok = func->functary; /* point to first in token array */
	for ( j = func->functotl ; j > 0 ; j-- ) {
		tok->token_queue.token_next_ptr = (Apltoken)offtptr(
			(char *)(func->functary),
			tok->token_queue.token_next_offset);
		tok++;
	}
	tokhdr = func->functokp; /* point to array of token headers */
	for ( j = func->funcstmt ; j > 0 ; j-- ) {
		i = read(fp, &k, sizeof(k)); /* read next offset */
		*tokhdr++ = (Apltoken)offtptr(
			(char *)(func->functary), k);
	}
	i = read(fp, &k, sizeof(k)); /* Read offset local variable list, */
	func->funcvars = (Apltoken)offtptr((char*)(func->functary), k);
	i = read(fp, &k, sizeof(k)); /* Read offset label list, */
	func->funclabs = (Apltoken)offtptr((char*)(func->functary), k);
	lovfsfo(fp,func); /* go read token elements */
	return(func);
}
[ RETURN TO DIRECTORY ]