#define PI 3.1415926535897932384626433832795028841971693
#define IMAG cmplx(0.0,1.0)
#define NEGA cmplx(-1.0,0.0)
#define UCN 100
#define CNL 10

typedef struct {
  double re;
  double im;
} complex;

typedef struct {
  complex **mat;
  int row;
  int column;
} matrix;

struct con {
  char name[CNL];
  matrix val;
};

extern int mathcalerr;
extern struct con cnst[UCN];

extern matrix expanl(char[]);
extern matrix analyze(char[]);
extern matrix makemat(char[]);
extern int *form(matrix *, int, int);
extern void mclear(matrix);
extern double deg(double);
extern double rad(double);
extern double arg(complex);
extern double cabs(complex);
extern complex casin(complex);
extern complex cmplx(double, double);
extern complex cadd(complex, complex);
extern complex cmulti(complex, complex);
extern complex cdivid(complex, complex);
extern complex cmod(complex, complex);
extern complex cacos(complex);
extern complex catan(complex);
extern complex ccos(complex);
extern complex ccosh(complex);
extern complex cexp(complex);
extern complex clog(complex);
extern complex csin(complex);
extern complex csinh(complex);
extern complex csqrt(complex);
extern complex ctan(complex);
extern complex ctanh(complex);
extern complex cpow(complex, complex);
extern complex cfloor(complex);
extern complex cceil(complex);
extern matrix madd(matrix, matrix);
extern matrix mmulti(matrix, matrix);
extern matrix mmod(matrix, matrix);
extern matrix det(matrix);
extern matrix inv(matrix);
extern matrix umat(matrix);
extern matrix trans(matrix);
extern matrix mabs(matrix);
extern matrix macos(matrix);
extern matrix masin(matrix);
extern matrix matan(matrix);
extern matrix mcos(matrix);
extern matrix mcosh(matrix);
extern matrix mexp(matrix);
extern matrix mlog(matrix);
extern matrix mlog2(matrix);
extern matrix mlog10(matrix);
extern matrix msin(matrix);
extern matrix msinh(matrix);
extern matrix msqrt(matrix);
extern matrix mtan(matrix);
extern matrix mtanh(matrix);
extern matrix mpow(matrix, matrix);
extern matrix mceil(matrix);
extern matrix mfloor(matrix);
extern matrix mpai(matrix, matrix, char[], char[]);
extern matrix msigma(matrix, matrix, char[], char[]);
extern matrix msinc(matrix);
extern matrix mpulse(matrix);
extern matrix mtriangle(matrix);
extern matrix mroot(matrix, matrix);
extern matrix mreal(matrix);
extern matrix mimag(matrix);
extern matrix mconj(matrix);
extern matrix marg(matrix);
extern matrix mrad(matrix);
extern matrix mdeg(matrix);
extern double sinc(double);
extern double pulse(double);
extern double triangle(double);
extern int cnstsearch(char[]);
extern void mprintf(matrix);
extern const char *emessage(char);
