#include #include "Matrix.h" short WriteMatrix(matrix *m, FILE *file); short StringToNum(char*,long*,char); short ReadMatrix(matrix *m, FILE *file); short SkipMatrix(FILE *file); /* n arguemnts: first - file to store data 2-n which matrices 1 = first matrix! */ main(int argc, char *argv[]) { short c; short hi, low; short nl, len; FILE *file; long size; matrix m; long which; short err; if(argc<3) {printf("Opps!\n");return;} file=fopen(argv[1],"r"); if(file==0) {printf("Failed to open file %s.\n",argv[1]);return;} for(nl=2;nl1) {if(SkipMatrix(file)<0) return;which--;} err=ReadMatrix(&m,file); if(err>0) {PrintMatrix(&m,"%5.1f");DisposeMatrix(&m);} } fclose(file); } short WriteMatrix(matrix *m, FILE *file) { long size; size=fwrite((void*)&m->rows,sizeof(m->rows),1,file); if(size!=1) return(-1); size=fwrite((void*)&m->cols,sizeof(m->cols),1,file); if(size!=1) return(-1); size=fwrite((void*)m->st,sizeof(m->st[0]),m->rows*m->cols,file); if(size!=m->rows*m->cols) return(-1); return (1); } short ReadMatrix(matrix *m, FILE *file); short ReadMatrix(matrix *m, FILE *file) { long size; size=fread((void*)&m->rows,sizeof(m->rows),1,file); if(size!=1) { if(feof(file)!=0) printf("End of file - not that many matricies.\n"); else printf("Error trying to read rows."); return (-1); } size=fread((void*)&m->cols,sizeof(m->cols),1,file); if(size!=1) {printf("Error reading cols!"); return (-1);} NewMatrix(m,m->rows,m->cols); size=fread((void*)m->st,sizeof(m->st[0]),m->rows*m->cols,file); if(size!=m->rows*m->cols) { printf("Error reading matrix data."); DisposeMatrix(m); return (-1);} return (1); } short SkipMatrix(FILE *file) { /* Assumes current file position is the start of a matrix; Finishes with the current file position at the start of the next matrix.*/ short rows, cols; long size; int err; size=fread((void*)&rows,sizeof(rows),1,file); if(size!=1) { if(feof(file)!=0) printf("End of file - not that many matricies.\n"); else printf("Error trying to read rows."); return (-1); } size=fread((void*)&cols,sizeof(cols),1,file); if(size!=1) {printf("Error reading cols!"); return (-1);} err=fseek(file,rows*cols*sizeof(entry_type),SEEK_CUR); if(err!=0) { printf("Error skipping matrix data."); return (-1);} return (1); }