/* brian's bunch o' hozerish matrix functions */
/* Mon Mar 16 03:10:02 PST 1998 */

typedef struct mat {
	unsigned long rows, cols;
	double **e;
} mat;

mat *m_alloc(unsigned long rows, unsigned long cols);
mat *m_copy(mat *a);
mat *m_identity(unsigned long rows, unsigned long cols);
mat *m_read_from_file(char *filename);
mat *m_read_from_stream(FILE *fp);
mat *m_read_argument(char *filename);
void m_addrow(mat *a, double c, unsigned long row_from, unsigned long row_to);
void m_dealloc(mat *m);
void m_fprint(FILE *fp, mat *a);
void m_gausselim(mat *a, mat **u, mat **l);
void m_mult(mat **product, mat *a, mat *b);
void m_print(mat *a);
void m_row_exch(mat *a, unsigned long row_from, unsigned long row_to);
void m_rowmult(mat *a, unsigned long row, double c);
void m_smult(mat **product, double c, mat *a);
void m_addmat(mat **c, mat *a, mat *b);
