/* files.c basic routines for reading and writing binary epr data files updated to use the new binary file format with expanded comments */ #include #include #include #include "constant.h" #include "filename.h" /***************************************************************************/ /* show_file_type: return flag for type of file. 1= 2 column text files 2= binary files, lmb format */ int show_file_type( void ) { return(BINFILE); } /**************************** READ FILE ***************************** Read data for an import. Deals with fpar, fstring, fnote0, and data return: 1 if error, 0 if no error. */ int read_file( char *fname, double *ddata, float *fpar, char fstring[][STRSIZE], char *fnote0, char *fnote1, char *fnote2 ) { FILE *fp; int i, ip; float fvalue; char gstring[13]; /* file not able to be read from */ if ((fp = fopen(fname, "rb")) == NULL) return(1); fread( gstring, 4, 1, fp ); gstring[4] = '\0'; if( strcmp(gstring, FILE_1)!=0 && strcmp(gstring, FILE_2 )!=0 ) { fclose(fp); return(1); /* Not correct info. so exit */ } for(i = 1; i <= MAX_PAR; ++i) /* read data parameters */ fread(&fpar[i], 4, 1, fp); if( (int) fpar[3] > MAX_PTS ) { /* check # data points */ fclose(fp); return(1); } for(i = 1; i <= (int)fpar[3]; ++i) { /* read data values */ fread(&fvalue, 4, 1, fp); ddata[i] = (double) fvalue; } fread(fnote0, 60, 1, fp); /* read comment */ for(i = 1; i < STR_NUM ; ++i ) /* read strings */ fread( fstring[i], 12, 1, fp ); if( strcmp(gstring, FILE_2)==0 ) { /* read extra comments */ fread( fnote1, 60, 1, fp ); fread( fnote2, 60, 1, fp ); } fclose(fp); /* close file */ return(0); /* return success flag */ } /* end of OPEN FILE */ /****************************** WRITE FILE ********************* Write data to the epr clipboard file. return: 1 if error, 0 if no error, -1 if file exists */ int write_file( int overwrite, char *fname, double *ddata, float *fpar, char fstring[][STRSIZE], char *fnote0, char *fnote1, char *fnote2 ) { FILE *fp; float fvalue; int i, ip; /* check if file exists first */ if( overwrite==0 ) if( (fp=fopen(fname, "rb")) != NULL ) { fclose( fp ); return( -1 ); } /* now see if it can be created */ if ((fp = fopen(fname, "wb")) == NULL) return( 1 ); /* start writing to file */ fwrite( FILE_2, 4, 1, fp ); /* output header */ ip= (int) fpar[3]; for(i = 1; i <= MAX_PAR; i++) /* output parameters */ fwrite(&fpar[i], 4, 1, fp); /* data tye is float */ for(i = 1; i <= ip; i++) { /* output data values */ fvalue= fabs( ddata[i] ); /* data type is float */ if( fvalue < -1.0e+20 || fvalue > 1.0e+20 ) fvalue = 0.0; else fvalue = (float) ddata[i]; fwrite(&fvalue, 4, 1, fp); } fwrite(fnote0, 60, 1, fp); /* output comment */ for(i = 1; i < STR_NUM-1 ; i++ ) /* ouptut strings */ fwrite( fstring[i], 12, 1, fp ); fwrite(fnote1, 60, 1, fp ); /* output extra comments */ fwrite(fnote2, 60, 1, fp ); fclose(fp); /* close file */ return(0); /* return success flag */ } /* end of WRITE FILE */