/* mixed.h */
/* Copyright 1992 by P.J. LaBrocca */

#ifndef MIXED_H
#define MIXED_H

typedef long Integer;

#define MAXFACTOR   40      /* maximum number of factors */
#define NUMER       0       /* index for numerator */
#define DENOM       1       /* index for denominator */
#define POSITIVE    1
#define NEGATIVE    -1

typedef struct {
	Integer whole;
	Integer num;
	Integer den;
	int  sign;
	Integer factors[2][MAXFACTOR];
} mixed_t;

extern Integer Primes[];	/* space for prime numbers */

mixed_t mix_error(char *s);

void init_primes( void );

mixed_t *mix_init( mixed_t *m, Integer w, Integer n, Integer d );
mixed_t *mix_clear( mixed_t *m );
mixed_t *mix_factor( mixed_t *m );
mixed_t *mix_reduce( mixed_t *m );
void mix_make_improper( mixed_t *m );
void mix_print( mixed_t *m );

mixed_t mix_sub(mixed_t *x, mixed_t *y);
mixed_t mix_add(mixed_t *x, mixed_t *y);
mixed_t mix_mul(mixed_t *x, mixed_t *y);
mixed_t mix_recip(mixed_t f);
mixed_t mix_divide(mixed_t *f, mixed_t *g);
Integer lcd(mixed_t *f, mixed_t *g);
void mix_neg(mixed_t *f);

#endif

