Files
mlio/mlio.c
T
jens 1625aa7391 Initial import
git-svn-id: http://moon:8086/svn/software/trunk/libsrc/mlio@1 b431acfa-c32f-4a4a-93f1-934dc6c82436
2014-07-19 07:44:42 +00:00

83 lines
2.1 KiB
C
Executable File

// -----------------------------------------------------------------------------------------
// mlio.c
// Input/output for Matlab matrices
// -----------------------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "mlio.h"
// -----------------------------------------------------------------------------------------
int mlio_open(mlio_t *pObj, char *pName, unsigned mode)
{
pObj->io_mode = mode;
if (mode == MLIO_READ)
{
pObj->pFile = fopen(pName, "rb");
// Read input file
if (!pObj->pFile)
{
fprintf(stderr,"Unable to open input file %s\n", pName);
return -1;
}
// Header
fread(&pObj->hdr_file.version, 1, sizeof(unsigned), pObj->pFile);
fscanf(pObj->pFile, "%s", pObj->hdr_file.prec_typename);
fseek(pObj->pFile, 1, SEEK_CUR);
fread(&pObj->hdr_data, 1, sizeof(data_hdr_t), pObj->pFile);
printf("Rows=%d, Columns=%d, File size=%d bytes\n", pObj->hdr_data.num_row, pObj->hdr_data.num_col, pObj->hdr_data.size);
}
else
{
pObj->pFile = fopen(pName, "wb");
// Write output file
if (!pObj->pFile)
{
fprintf(stderr,"Unable to open output file %s\n", pName);
return -1;
}
}
return 0;
}
int mlio_close(mlio_t *pObj)
{
return fclose(pObj->pFile);
}
int mlio_read(mlio_t *pObj, double *pData)
{
// Read data
fread(pData, pObj->hdr_data.num_row*pObj->hdr_data.num_col, sizeof(double), pObj->pFile);
return 0;
}
int mlio_write(mlio_t *pObj, double *pData, unsigned num_rows, unsigned num_cols)
{
pObj->hdr_data.num_row = num_rows;
pObj->hdr_data.num_col = num_cols;
// Header
fwrite(&pObj->hdr_file.version, 1, sizeof(unsigned), pObj->pFile);
fprintf(pObj->pFile, "%s\r", pObj->hdr_file.prec_typename);
fwrite(&pObj->hdr_data, 1, sizeof(data_hdr_t), pObj->pFile);
// Write data
fwrite(pData, pObj->hdr_data.num_row*pObj->hdr_data.num_col, sizeof(double), pObj->pFile);
return 0;
}
// -----------------------------------------------------------------------------------------