/*
 * mtrxmath.h
 *
 * Header file for Matrix Math Package
 *
 * Jeff Craig <luserjeff@linuxfreemail.com>
 *
 * 7-30-2000  Initial Revision (Jeff Craig)
 * 12-10-2000 Changed the MATRIX_TAG struct to be dynamic(Paul Sack)
 *	      Added the die() and alloc_matrix() prototypes (Paul Sack)
 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <getopt.h>

#define ADD         1
#define SUBTRACT    2
#define MULTIPLY    3
#define DETERMINANT 4
#define INVERT      5
#define DIVIDE      6
#define REDUCE      7

extern char *optarg; // PTR to option argument
extern int optind;   // argv[] index
extern int opterr;   // Controls error processing


typedef struct MATRIX_TAG
{
  float** matrix; 	 // The actual values of the Matrix
  unsigned int rows;     // Number of Rows in the Matrix
  unsigned int columns;  // Number of columns in the Matrix
} MATRIX, *MATRIX_PTR;

void show_matrix(MATRIX_PTR show);
MATRIX_PTR collect_matrix(FILE* file);
MATRIX_PTR alloc_matrix(unsigned int rows, unsigned int columns);
void free_matrix(MATRIX_PTR m);

void die(const char* msg);

MATRIX_PTR matrix_multiply (MATRIX_PTR first, MATRIX_PTR second);
MATRIX_PTR matrix_add      (MATRIX_PTR first, MATRIX_PTR second);
MATRIX_PTR matrix_sub      (MATRIX_PTR first, MATRIX_PTR second);
MATRIX_PTR reduce_matrix   (int columns, int rows, MATRIX_PTR matrix);
float      determinant     (MATRIX_PTR matrix);
MATRIX_PTR inverse         (MATRIX_PTR matrix);
int        power           (int base, int power);
void       scalar_mult     (MATRIX_PTR matrix, float scalar);
MATRIX_PTR matrix_divide   (MATRIX_PTR first, MATRIX_PTR second);


syntax highlighted by Code2HTML, v. 0.9.1