/* IO.c */
#include "../ZV.h"
static const char *suffixb = ".zvb" ;
static const char *suffixf = ".zvf" ;
/*--------------------------------------------------------------------*/
/*
----------------------------------------------
purpose -- to read in an ZV object from a file
input --
fn -- filename, must be *.zvb or *.zvf
return value -- 1 if success, 0 if failure
created -- 98jan22, cca
----------------------------------------------
*/
int
ZV_readFromFile (
ZV *zv,
char *fn
) {
FILE *fp ;
int fnlength, rc, sulength ;
/*
---------------
check the input
---------------
*/
if ( zv == NULL || fn == NULL ) {
fprintf(stderr, "\n error in ZV_readFromFile(%p,%s)"
"\n bad input\n", zv, fn) ;
return(0) ;
}
/*
-------------
read the file
-------------
*/
fnlength = strlen(fn) ;
sulength = strlen(suffixb) ;
if ( fnlength > sulength ) {
if ( strcmp(&fn[fnlength-sulength], suffixb) == 0 ) {
if ( (fp = fopen(fn, "rb")) == NULL ) {
fprintf(stderr, "\n error in ZV_readFromFile(%p,%s)"
"\n unable to open file %s", zv, fn, fn) ;
rc = 0 ;
} else {
rc = ZV_readFromBinaryFile(zv, fp) ;
fclose(fp) ;
}
} else if ( strcmp(&fn[fnlength-sulength], suffixf) == 0 ) {
if ( (fp = fopen(fn, "r")) == NULL ) {
fprintf(stderr, "\n error in ZV_readFromFile(%p,%s)"
"\n unable to open file %s", zv, fn, fn) ;
rc = 0 ;
} else {
rc = ZV_readFromFormattedFile(zv, fp) ;
fclose(fp) ;
}
} else {
fprintf(stderr, "\n error in ZV_readFromFile(%p,%s)"
"\n bad ZV file name %s,"
"\n must end in %s (binary) or %s (formatted)\n",
zv, fn, fn, suffixb, suffixf) ;
rc = 0 ;
}
} else {
fprintf(stderr, "\n error in ZV_readFromFile(%p,%s)"
"\n bad ZV file name %s,"
"\n must end in %s (binary) or %s (formatted)\n",
zv, fn, fn, suffixb, suffixf) ;
rc = 0 ;
}
return(rc) ; }
/*--------------------------------------------------------------------*/
/*
-----------------------------------------------------
purpose -- to read an ZV object from a formatted file
return value -- 1 if success, 0 if failure
created -- 98jan22, cca
-----------------------------------------------------
*/
int
ZV_readFromFormattedFile (
ZV *zv,
FILE *fp
) {
int rc, size ;
/*
---------------
check the input
---------------
*/
if ( zv == NULL || fp == NULL ) {
fprintf(stderr, "\n error in ZV_readFromFormattedFile(%p,%p)"
"\n bad input\n", zv, fp) ;
return(0) ;
}
ZV_clearData(zv) ;
/*
------------------------------
read in the size of the vector
------------------------------
*/
if ( (rc = fscanf(fp, "%d", &size)) != 1 ) {
fprintf(stderr, "\n error in ZV_readFromFormattedFile(%p,%p)"
"\n %d items of %d read\n", zv, fp, rc, 1) ;
return(0) ;
}
/*
---------------------
initialize the object
---------------------
*/
ZV_init(zv, size, NULL) ;
/*
------------------------
read in the vec[] vector
------------------------
*/
if ( (rc = DVfscanf(fp, 2*size, ZV_entries(zv))) != 2*size ) {
fprintf(stderr, "\n error in ZV_readFromFormattedFile(%p,%p)"
"\n %d items of %d read\n", zv, fp, rc, 2*size) ;
return(0) ;
}
return(1) ; }
/*--------------------------------------------------------------------*/
/*
---------------------------------------------------
purpose -- to read an ZV object from a binary file
return value -- 1 if success, 0 if failure
created -- 98jan22, cca
---------------------------------------------------
*/
int
ZV_readFromBinaryFile (
ZV *zv,
FILE *fp
) {
int rc, size ;
/*
---------------
check the input
---------------
*/
if ( zv == NULL || fp == NULL ) {
fprintf(stderr, "\n fatal error in ZV_readFromBinaryFile(%p,%p)"
"\n bad input\n", zv, fp) ;
return(0) ;
}
ZV_clearData(zv) ;
/*
------------------------------
read in the size of the vector
------------------------------
*/
if ( (rc = fread((void *) &size, sizeof(int), 1, fp)) != 1 ) {
fprintf(stderr, "\n error in ZV_readFromBinaryFile(%p,%p)"
"\n itemp(3) : %d items of %d read\n", zv, fp, rc, 1) ;
return(0) ;
}
/*
---------------------
initialize the object
---------------------
*/
ZV_init(zv, size, NULL) ;
/*
------------------------
read in the vec[] vector
------------------------
*/
if ( (rc = fread((void *) ZV_entries(zv), sizeof(double), 2*size, fp))
!= 2*size ) {
fprintf(stderr, "\n error in ZV_readFromBinaryFile(%p,%p)"
"\n %d items of %d read\n",
zv, fp, rc, 2*size) ;
return(0) ;
}
return(1) ; }
/*--------------------------------------------------------------------*/
/*
-------------------------------------------
purpose -- to write an ZV object to a file
input --
fn -- filename
*.zvb -- binary
*.zvf -- formatted
anything else -- for human eye
return value -- 1 if success, 0 otherwise
created -- 98jan22, cca
-------------------------------------------
*/
int
ZV_writeToFile (
ZV *zv,
char *fn
) {
FILE *fp ;
int fnlength, rc, sulength ;
/*
---------------
check the input
---------------
*/
if ( zv == NULL || fn == NULL ) {
fprintf(stderr, "\n fatal error in ZV_writeToFile(%p,%s)"
"\n bad input\n", zv, fn) ;
}
/*
------------------
write out the file
------------------
*/
fnlength = strlen(fn) ;
sulength = strlen(suffixb) ;
if ( fnlength > sulength ) {
if ( strcmp(&fn[fnlength-sulength], suffixb) == 0 ) {
if ( (fp = fopen(fn, "wb")) == NULL ) {
fprintf(stderr, "\n error in ZV_writeToFile(%p,%s)"
"\n unable to open file %s", zv, fn, fn) ;
rc = 0 ;
} else {
rc = ZV_writeToBinaryFile(zv, fp) ;
fclose(fp) ;
}
} else if ( strcmp(&fn[fnlength-sulength], suffixf) == 0 ) {
if ( (fp = fopen(fn, "w")) == NULL ) {
fprintf(stderr, "\n error in ZV_writeToFile(%p,%s)"
"\n unable to open file %s", zv, fn, fn) ;
rc = 0 ;
} else {
rc = ZV_writeToFormattedFile(zv, fp) ;
fclose(fp) ;
}
} else {
if ( (fp = fopen(fn, "a")) == NULL ) {
fprintf(stderr, "\n error in ZV_writeToFile(%p,%s)"
"\n unable to open file %s", zv, fn, fn) ;
rc = 0 ;
} else {
rc = ZV_writeForHumanEye(zv, fp) ;
fclose(fp) ;
}
}
} else {
if ( (fp = fopen(fn, "a")) == NULL ) {
fprintf(stderr, "\n error in ZV_writeToFile(%p,%s)"
"\n unable to open file %s", zv, fn, fn) ;
rc = 0 ;
} else {
rc = ZV_writeForHumanEye(zv, fp) ;
fclose(fp) ;
}
}
return(rc) ; }
/*--------------------------------------------------------------------*/
/*
-----------------------------------------------------
purpose -- to write an ZV object to a formatted file
return value -- 1 if success, 0 otherwise
created -- 98jan22, cca
-----------------------------------------------------
*/
int
ZV_writeToFormattedFile (
ZV *zv,
FILE *fp
) {
int rc, size ;
/*
---------------
check the input
---------------
*/
if ( zv == NULL || fp == NULL || zv->size <= 0 ) {
fprintf(stderr, "\n fatal error in ZV_writeToFormattedFile(%p,%p)"
"\n bad input\n", zv, fp) ;
fprintf(stderr, "\n zv->size = %d", zv->size) ;
exit(-1) ;
}
/*
-------------------------------------
write out the size of the vector
-------------------------------------
*/
size = ZV_size(zv) ;
rc = fprintf(fp, "\n %d", size) ;
if ( rc < 0 ) {
fprintf(stderr, "\n fatal error in ZV_writeToFormattedFile(%p,%p)"
"\n rc = %d, return from first fprintf\n", zv, fp, rc) ;
return(0) ;
}
if ( size > 0 ) {
DVfprintf(fp, 2*size, ZV_entries(zv)) ;
}
return(1) ; }
/*--------------------------------------------------------------------*/
/*
--------------------------------------------------
purpose -- to write an ZV object to a binary file
return value -- 1 if success, 0 otherwise
created -- 98jan22, cca
--------------------------------------------------
*/
int
ZV_writeToBinaryFile (
ZV *zv,
FILE *fp
) {
int rc, size ;
/*
---------------
check the input
---------------
*/
if ( zv == NULL || fp == NULL || zv->size <= 0 ) {
fprintf(stderr, "\n fatal error in ZV_writeToBinaryFile(%p,%p)"
"\n bad input\n", zv, fp) ;
exit(-1) ;
}
size = ZV_size(zv) ;
rc = fwrite((void *) &size, sizeof(int), 1, fp) ;
if ( rc != 1 ) {
fprintf(stderr, "\n error in ZV_writeToBinaryFile(%p,%p)"
"\n %d of %d scalar items written\n", zv, fp, rc, 1) ;
return(0) ;
}
rc = fwrite((void *) ZV_entries(zv), sizeof(double), 2*size, fp) ;
if ( rc != 2*size ) {
fprintf(stderr, "\n error in ZV_writeToBinaryFile(%p,%p)"
"\n %d of %d items written\n",
zv, fp, rc, 2*size) ;
return(0) ;
}
return(1) ; }
/*--------------------------------------------------------------------*/
/*
-------------------------------------------------
purpose -- to write an ZV object for a human eye
return value -- 1 if success, 0 otherwise
created -- 98jan22, cca
-------------------------------------------------
*/
int
ZV_writeForHumanEye (
ZV *zv,
FILE *fp
) {
double *vec ;
int ii, jj, rc, size ;
if ( zv == NULL || fp == NULL ) {
fprintf(stderr, "\n fatal error in ZV_writeForHumanEye(%p,%p)"
"\n bad input\n", zv, fp) ;
exit(-1) ;
}
if ( (rc = ZV_writeStats(zv, fp)) == 0 ) {
fprintf(stderr, "\n fatal error in ZV_writeForHumanEye(%p,%p)"
"\n rc = %d, return from ZV_writeStats(%p,%p)\n",
zv, fp, rc, zv, fp) ;
return(0) ;
}
size = ZV_size(zv) ;
vec = ZV_entries(zv) ;
for ( ii = jj = 0 ; ii < size ; ii++, jj += 2 ) {
if ( ii % 2 == 0 ) {
fprintf(fp, "\n") ;
}
fprintf(fp, " < %12.4e, %12.4e >", vec[jj], vec[jj+1]) ;
}
return(1) ; }
/*--------------------------------------------------------------------*/
/*
---------------------------------------------------------
purpose -- to write out the statistics for the ZV object
return value -- 1 if success, 0 otherwise
created -- 98jan22, cca
---------------------------------------------------------
*/
int
ZV_writeStats (
ZV *zv,
FILE *fp
) {
int rc ;
/*
---------------
check the input
---------------
*/
if ( zv == NULL || fp == NULL ) {
fprintf(stderr, "\n error in ZV_writeStats(%p,%p)"
"\n bad input\n", zv, fp) ;
exit(-1) ;
}
rc = fprintf(fp, "\n ZV : double complex vector object : ") ;
if ( rc < 0 ) { goto IO_error ; }
rc = fprintf(fp,
" size = %d, maxsize = %d, owned = %d",
zv->size, zv->maxsize, zv->owned) ;
if ( rc < 0 ) { goto IO_error ; }
return(1) ;
IO_error :
fprintf(stderr, "\n fatal error in ZV_writeStats(%p,%p)"
"\n rc = %d, return from fprintf\n", zv, fp, rc) ;
return(0) ;
}
/*--------------------------------------------------------------------*/
/*
--------------------------------------------------
purpose -- write the vector entries out for matlab
created -- 98apr15, cca
--------------------------------------------------
*/
void
ZV_writeForMatlab (
ZV *zv,
char *vecname,
FILE *fp
) {
int ii, jj, size ;
double *z ;
/*
---------------
check the input
---------------
*/
if ( zv == NULL || vecname == NULL || fp == NULL ) {
fprintf(stderr, "\n fatal error in ZV_writeForMatlab(%p,%p,%p)"
"\n bad input\n", zv, vecname, fp) ;
exit(-1) ;
}
ZV_sizeAndEntries(zv, &size, &z) ;
for ( ii = jj = 0 ; ii < size ; ii++, jj += 2 ) {
fprintf(fp, "\n %s(%d) = %24.16e + %24.16e*i;",
vecname, ii + 1, z[jj], z[jj+1]) ;
}
return ; }
/*--------------------------------------------------------------------*/
syntax highlighted by Code2HTML, v. 0.9.1