typedef struct
{
	ELEMENT		degree;		/*  degree of polynomial  */
	ELEMENT		memdex;		/*  index into ram_block array  */
} MULTIPOLY;

typedef struct
{
	ELEMENT	flag;		/*  marks block as free or used  for crunch time */
	ELEMENT	up;		/*  next index to ram_block in address increasing order */
	ELEMENT	down;	/*  previous index to ram_block in adress decreasing order */
	ELEMENT	size;		/*  number of FIELD2N blocks allocated for this ram_block */
	FIELD2N	*start;	/*  address in pool_mem of this data block  */
}  RAMDATA;

#define  Address(v)		ram_block[(v).memdex].start
#define AddressOf(v)	ram_block[(v)->memdex].start

int get_space(MULTIPOLY *newpoly);
void multi_copy( ELEMENT length, FIELD2N *source, FIELD2N *destination);
void crunch_ram();
int multi_dup( MULTIPOLY from,  MULTIPOLY *to);
ELEMENT zero_check( FIELD2N *z);

/*int multi_add( MULTIPOLY A, MULTIPOLY B, MULTIPOLY *C);
int multi_mul( MULTIPOLY A, MULTIPOLY B, MULTIPOLY *C);
ELEMENT zero_check( FIELD2N z);
int multi_div( MULTIPOLY Top, MULTIPOLY Bottom, 
				MULTIPOLY *Quotient, MULTIPOLY *Remainder);
int	multi_gcd( MULTIPOLY A, MULTIPOLY B, MULTIPOLY *gcd);
int gen_division_polynomial( MULTIPOLY *f, int length, CURVE curv);
int gen_xmodf( MULTIPOLY f, MULTIPOLY *xmod);
int xqmodf( MULTIPOLY f, MULTIPOLY *xmodf, MULTIPOLY *xq);
*/