/* IO.c */
#include "../IV.h"
static const char *suffixb = ".ivb" ;
static const char *suffixf = ".ivf" ;
/*--------------------------------------------------------------------*/
/*
----------------------------------------------
purpose -- to read in an IV object from a file
input --
fn -- filename, must be *.ivb or *.ivf
return value -- 1 if success, 0 if failure
created -- 95oct06, cca
----------------------------------------------
*/
int
IV_readFromFile (
IV *iv,
char *fn
) {
FILE *fp ;
int fnlength, rc, sulength ;
/*
---------------
check the input
---------------
*/
if ( iv == NULL || fn == NULL ) {
fprintf(stderr,
"\n error in IV_readFromFile(%p,%s), file %s, line %d"
"\n bad input\n", iv, fn, __FILE__, __LINE__) ;
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 IV_readFromFile(%p,%s)"
"\n unable to open file %s", iv, fn, fn) ;
rc = 0 ;
} else {
rc = IV_readFromBinaryFile(iv, fp) ;
fclose(fp) ;
}
} else if ( strcmp(&fn[fnlength-sulength], suffixf) == 0 ) {
if ( (fp = fopen(fn, "r")) == NULL ) {
fprintf(stderr, "\n error in IV_readFromFile(%p,%s)"
"\n unable to open file %s", iv, fn, fn) ;
rc = 0 ;
} else {
rc = IV_readFromFormattedFile(iv, fp) ;
fclose(fp) ;
}
} else {
fprintf(stderr, "\n error in IV_readFromFile(%p,%s)"
"\n bad IV file name %s,"
"\n must end in %s (binary) or %s (formatted)\n",
iv, fn, fn, suffixb, suffixf) ;
rc = 0 ;
}
} else {
fprintf(stderr, "\n error in IV_readFromFile(%p,%s)"
"\n bad IV file name %s,"
"\n must end in %s (binary) or %s (formatted)\n",
iv, fn, fn, suffixb, suffixf) ;
rc = 0 ;
}
return(rc) ; }
/*--------------------------------------------------------------------*/
/*
-----------------------------------------------------
purpose -- to read an IV object from a formatted file
return value -- 1 if success, 0 if failure
created -- 95oct06, cca
-----------------------------------------------------
*/
int
IV_readFromFormattedFile (
IV *iv,
FILE *fp
) {
int rc, size ;
/*
---------------
check the input
---------------
*/
if ( iv == NULL || fp == NULL ) {
fprintf(stderr, "\n error in IV_readFromFormattedFile(%p,%p)"
"\n bad input\n", iv, fp) ;
return(0) ;
}
IV_clearData(iv) ;
/*
------------------------------
read in the size of the vector
------------------------------
*/
if ( (rc = fscanf(fp, "%d", &size)) != 1 ) {
fprintf(stderr, "\n error in IV_readFromFormattedFile(%p,%p)"
"\n %d items of %d read\n", iv, fp, rc, 1) ;
return(0) ;
}
/*
---------------------
initialize the object
---------------------
*/
IV_init(iv, size, NULL) ;
iv->size = size ;
/*
------------------------
read in the vec[] vector
------------------------
*/
if ( (rc = IVfscanf(fp, size, iv->vec)) != size ) {
fprintf(stderr, "\n error in IV_readFromFormattedFile(%p,%p)"
"\n %d items of %d read\n", iv, fp, rc, size) ;
return(0) ;
}
return(1) ; }
/*--------------------------------------------------------------------*/
/*
---------------------------------------------------
purpose -- to read an IV object from a binary file
return value -- 1 if success, 0 if failure
created -- 95oct06, cca
---------------------------------------------------
*/
int
IV_readFromBinaryFile (
IV *iv,
FILE *fp
) {
int rc, size ;
/*
---------------
check the input
---------------
*/
if ( iv == NULL || fp == NULL ) {
fprintf(stderr, "\n fatal error in IV_readFromBinaryFile(%p,%p)"
"\n bad input\n", iv, fp) ;
return(0) ;
}
IV_clearData(iv) ;
/*
------------------------------
read in the size of the vector
------------------------------
*/
if ( (rc = fread((void *) &size, sizeof(int), 1, fp)) != 1 ) {
fprintf(stderr, "\n error in IV_readFromBinaryFile(%p,%p)"
"\n itemp(3) : %d items of %d read\n", iv, fp, rc, 1) ;
return(0) ;
}
/*
---------------------
initialize the object
---------------------
*/
IV_init(iv, size, NULL) ;
iv->size = size ;
/*
------------------------
read in the vec[] vector
------------------------
*/
if ( (rc = fread((void *) iv->vec, sizeof(int), size, fp)) != size ) {
fprintf(stderr, "\n error in IV_readFromBinaryFile(%p,%p)"
"\n sizes(%d) : %d items of %d read\n",
iv, fp, size, rc, size) ;
return(0) ;
}
return(1) ; }
/*--------------------------------------------------------------------*/
/*
-------------------------------------------
purpose -- to write an IV object to a file
input --
fn -- filename
*.ivb -- binary
*.ivf -- formatted
anything else -- for human eye
return value -- 1 if success, 0 otherwise
created -- 95oct06, cca
-------------------------------------------
*/
int
IV_writeToFile (
IV *iv,
char *fn
) {
FILE *fp ;
int fnlength, rc, sulength ;
/*
---------------
check the input
---------------
*/
if ( iv == NULL || fn == NULL ) {
fprintf(stderr, "\n fatal error in IV_writeToFile(%p,%s)"
"\n bad input\n", iv, 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 IV_writeToFile(%p,%s)"
"\n unable to open file %s", iv, fn, fn) ;
rc = 0 ;
} else {
rc = IV_writeToBinaryFile(iv, fp) ;
fclose(fp) ;
}
} else if ( strcmp(&fn[fnlength-sulength], suffixf) == 0 ) {
if ( (fp = fopen(fn, "w")) == NULL ) {
fprintf(stderr, "\n error in IV_writeToFile(%p,%s)"
"\n unable to open file %s", iv, fn, fn) ;
rc = 0 ;
} else {
rc = IV_writeToFormattedFile(iv, fp) ;
fclose(fp) ;
}
} else {
if ( (fp = fopen(fn, "a")) == NULL ) {
fprintf(stderr, "\n error in IV_writeToFile(%p,%s)"
"\n unable to open file %s", iv, fn, fn) ;
rc = 0 ;
} else {
rc = IV_writeForHumanEye(iv, fp) ;
fclose(fp) ;
}
}
} else {
if ( (fp = fopen(fn, "a")) == NULL ) {
fprintf(stderr, "\n error in IV_writeToFile(%p,%s)"
"\n unable to open file %s", iv, fn, fn) ;
rc = 0 ;
} else {
rc = IV_writeForHumanEye(iv, fp) ;
fclose(fp) ;
}
}
return(rc) ; }
/*--------------------------------------------------------------------*/
/*
-----------------------------------------------------
purpose -- to write an IV object to a formatted file
return value -- 1 if success, 0 otherwise
created -- 95oct06, cca
-----------------------------------------------------
*/
int
IV_writeToFormattedFile (
IV *iv,
FILE *fp
) {
int ierr, rc ;
/*
---------------
check the input
---------------
*/
if ( iv == NULL || fp == NULL || iv->size <= 0 ) {
fprintf(stderr, "\n fatal error in IV_writeToFormattedFile(%p,%p)"
"\n bad input\n", iv, fp) ;
fprintf(stderr, "\n iv->size = %d", iv->size) ;
exit(-1) ;
}
/*
-------------------------------------
write out the size of the vector
-------------------------------------
*/
rc = fprintf(fp, "\n %d", iv->size) ;
if ( rc < 0 ) {
fprintf(stderr, "\n fatal error in IV_writeToFormattedFile(%p,%p)"
"\n rc = %d, return from first fprintf\n", iv, fp, rc) ;
return(0) ;
}
if ( iv->size > 0 ) {
IVfp80(fp, iv->size, iv->vec, 80, &ierr) ;
if ( ierr < 0 ) {
fprintf(stderr,
"\n fatal error in IV_writeToFormattedFile(%p,%p)"
"\n ierr = %d, return from sizes[] IVfp80\n",
iv, fp, ierr) ;
return(0) ;
}
}
return(1) ; }
/*--------------------------------------------------------------------*/
/*
--------------------------------------------------
purpose -- to write an IV object to a binary file
return value -- 1 if success, 0 otherwise
created -- 95oct06, cca
--------------------------------------------------
*/
int
IV_writeToBinaryFile (
IV *iv,
FILE *fp
) {
int rc ;
/*
---------------
check the input
---------------
*/
if ( iv == NULL || fp == NULL || iv->size <= 0 ) {
fprintf(stderr, "\n fatal error in IV_writeToBinaryFile(%p,%p)"
"\n bad input\n", iv, fp) ;
exit(-1) ;
}
rc = fwrite((void *) &iv->size, sizeof(int), 1, fp) ;
if ( rc != 1 ) {
fprintf(stderr, "\n error in IV_writeToBinaryFile(%p,%p)"
"\n %d of %d scalar items written\n", iv, fp, rc, 1) ;
return(0) ;
}
rc = fwrite((void *) iv->vec, sizeof(int), iv->size, fp) ;
if ( rc != iv->size ) {
fprintf(stderr, "\n error in IV_writeToBinaryFile(%p,%p)"
"\n iv->sizes, %d of %d items written\n",
iv, fp, rc, iv->size) ;
return(0) ;
}
return(1) ; }
/*--------------------------------------------------------------------*/
/*
-------------------------------------------------
purpose -- to write an IV object for a human eye
return value -- 1 if success, 0 otherwise
created -- 95oct06, cca
-------------------------------------------------
*/
int
IV_writeForHumanEye (
IV *iv,
FILE *fp
) {
int ierr, rc ;
if ( iv == NULL || fp == NULL ) {
fprintf(stderr, "\n fatal error in IV_writeForHumanEye(%p,%p)"
"\n bad input\n", iv, fp) ;
exit(-1) ;
}
if ( (rc = IV_writeStats(iv, fp)) == 0 ) {
fprintf(stderr, "\n fatal error in IV_writeForHumanEye(%p,%p)"
"\n rc = %d, return from IV_writeStats(%p,%p)\n",
iv, fp, rc, iv, fp) ;
return(0) ;
}
IVfp80(fp, iv->size, iv->vec, 80, &ierr) ;
return(1) ; }
/*--------------------------------------------------------------------*/
/*
---------------------------------------------------------
purpose -- to write out the statistics for the IV object
return value -- 1 if success, 0 otherwise
created -- 95oct06, cca
---------------------------------------------------------
*/
int
IV_writeStats (
IV *iv,
FILE *fp
) {
int rc ;
/*
---------------
check the input
---------------
*/
if ( iv == NULL || fp == NULL ) {
fprintf(stderr, "\n error in IV_writeStats(%p,%p)"
"\n bad input\n", iv, fp) ;
exit(-1) ;
}
rc = fprintf(fp, "\n IV : integer vector object : ") ;
if ( rc < 0 ) { goto IO_error ; }
rc = fprintf(fp, " size = %d, maxsize = %d, owned = %d",
iv->size, iv->maxsize, iv->owned) ;
if ( rc < 0 ) { goto IO_error ; }
return(1) ;
IO_error :
fprintf(stderr, "\n fatal error in IV_writeStats(%p,%p)"
"\n rc = %d, return from fprintf\n", iv, fp, rc) ;
return(0) ;
}
/*--------------------------------------------------------------------*/
/*
-------------------------------------------------------------------
purpose -- to write out an integer vector with eighty column lines
input --
fp -- file pointer, must be formatted and write access
column -- present column
pierr -- pointer to int to hold return value,
should be 1 if any print was successful,
if fprintf() failed, then ierr = -1
return value -- present column
created -- 96jun22, cca
-------------------------------------------------------------------
*/
int
IV_fp80 (
IV *iv,
FILE *fp,
int column,
int *pierr
) {
/*
---------------
check the input
---------------
*/
if ( iv == NULL || fp == NULL || pierr == NULL ) {
fprintf(stderr, "\n fatal error in IV_fp80(%p,%p,%p)"
"\n bad input\n", iv, fp, pierr) ;
exit(-1) ;
}
if ( iv->size > 0 && iv->vec != NULL ) {
column = IVfp80(fp, iv->size, iv->vec, column, pierr) ;
}
return(column) ; }
/*--------------------------------------------------------------------*/
/*
---------------------------------------------------
purpose -- to write the IV object for a matlab file
return value -- 1 if success, 0 otherwise
created -- 98oct22, cca
---------------------------------------------------
*/
int
IV_writeForMatlab (
IV *iv,
char *name,
FILE *fp
) {
int ii, rc, size ;
int *entries ;
/*
---------------
check the input
---------------
*/
if ( iv == NULL || fp == NULL ) {
fprintf(stderr, "\n error in IV_writeForMatlab(%p,%p,%p)"
"\n bad input\n", iv, name, fp) ;
exit(-1) ;
}
IV_sizeAndEntries(iv, &size, &entries) ;
fprintf(fp, "\n %s = zeros(%d,%d) ;", name, size, size) ;
for ( ii = 0 ; ii < size ; ii++ ) {
fprintf(fp, "\n %s(%d) = %d ;", name, ii+1, entries[ii]+1) ;
}
return(1) ; }
/*--------------------------------------------------------------------*/
syntax highlighted by Code2HTML, v. 0.9.1