/*Copyright (C) 1992, 1995 by Thomas Glen Smith. All Rights Reserved.*/
/* lovfsfn APL2 V1.0.0 *************************************************
* Called from apllov1 to read a function definition during a )load. *
***********************************************************************/
#define INCLUDES APLCB+APLFUNCI+APLMEM+APLTOKEN+IO+STDIO+STRING
#include "includes.h"
Aplfunc lovfsfn(fp,flags)
int fp; /* file descriptor handle */
int flags; /* aplflags, already read by apllov_ */
{
Execqfxa; Expunge; Lovfscb; Lovfsfp;
Aplfunc func;
int cbflags,iw,jw;
int *ip;
if (NULL == (func = execqfxa(NULL))) return(NULL); /* out of memory */
func->funcflag = flags;
iw = read(fp, &(func->functype), sizeof(int));
iw = read(fp, &(func->functotl), sizeof(int));
iw = read(fp, &(func->funcstmt), sizeof(int));
if (NULL == (ip = malloc(jw = func->funcstmt * sizeof(int))))
return(expunge(func)); /* free memory, return NULL */
func->functokc = ip; /* Point to array to token counters. */
iw = read(fp, func->functokc, jw); /* Read array of token counters. */
iw = read(fp, &cbflags, sizeof(cbflags)); /* read aplflags */
func->functext = lovfscb(fp,cbflags); /* read aplcb for text */
jw = func->functotl * sizeof(struct apltoken);
if (NULL == (func->functary = malloc(jw)) ||
(NULL == (func->functokp = malloc(
func->funcstmt * sizeof(Apltoken)))))
return(expunge(func)); /* free memory, return NULL */
else
return(lovfsfp(fp,func,jw)); /* finish reading function */
}