4.4BSD/usr/src/contrib/calc-1.26.4/func.h

/*
 * Copyright (c) 1993 David I. Bell
 * Permission is granted to use, distribute, or modify this source,
 * provided that this copyright notice remains intact.
 */


/*
 * Structure of a function.
 * The f_opcodes array is actually of variable size.
 */
typedef struct func FUNC;
struct func {
	FUNC *f_next;			/* next function in list */
	unsigned long f_opcodecount;	/* size of opcode array */
	unsigned int f_localcount;	/* number of local variables */
	unsigned int f_paramcount;	/* max number of parameters */
	char *f_name;			/* function name */
	VALUE f_savedvalue;		/* saved value of last expression */
	long f_opcodes[1];		/* array of opcodes (variable length) */
};


/*
 * Amount of space needed to allocate a function of n opcodes.
 */
#define funcsize(n) (sizeof(FUNC) + (n) * sizeof(long))


/*
 * Size of a character pointer rounded up to a number of opcodes.
 */
#define PTR_SIZE ((sizeof(char *) + sizeof(long) - 1) / sizeof(long))


extern FUNC *curfunc;		/* current function being compiled */
extern FUNC *findfunc();	/* return function given index */
extern char *namefunc();	/* return function name given index */
extern BOOL evaluate();		/* evaluate a line */
extern long adduserfunc();
extern void beginfunc();	/* initialize a function for definition */
extern int builtinopcode();	/* return the opcode for a built-in function */
extern void addop();		/* add an opcode to the current function */
extern void endfunc();		/* commit the just defined function for use */
extern void addopindex();	/* add an opcode & index to the current func */
extern void addoplabel();	/* add jump-type opcode + label to the func */
extern void addopptr();		/* add an opcode + char ptr to the func */
extern void showbuiltins();	/* show list of primitive builtin funcs */
extern int getbuiltinfunc();	/* return the index of a built-in func */
extern void builtincheck();	/* determine if the # of arguments are legal */
extern void addopfunction();	/* add opcode + index + arg count to the func */
extern void showfunctions();	/* show the list of user defined functs */
extern void clearopt();		/* clear optimization done for next opcode */

/* END CODE */