00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include <stdio.h>
00024 #include <ctype.h>
00025 #include <stdlib.h>
00026 #include <unistd.h>
00027 #include <time.h>
00028 #include <string.h>
00029 #include <assert.h>
00030 #include <sys/types.h>
00031
00032 #include "common.h"
00033
00034
00035 FILE *binChannelFile[MAX_CHANNEL] = {
00036 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
00037 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
00038 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
00039 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
00040 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
00041 };
00042 char binChannelFileName[MAX_CHANNEL][128];
00043
00047 FILE* OpenBinChannel(int channel)
00048 {
00049 if (binChannelFile[channel]==NULL)
00050 {
00051 int fd;
00052 strcpy(binChannelFileName[channel],"titanfileXXXXXX");
00053 fd=OpenTempFile(binChannelFileName[channel]);
00054 assert((binChannelFile[channel]=fdopen(fd,"wt"))!=NULL);
00055 setvbuf(binChannelFile[channel],NULL,_IOFBF,FILE_BUFFER_SIZE);
00056
00057 if (binChannelFile[channel])
00058 {
00059
00060 InitInfoHeader(channel);
00061
00062 }
00063 else
00064 {
00065 PrintError("unable to open %s: %m\n",binChannelFileName[channel]);
00066 }
00067 }
00068 return(binChannelFile[channel]);
00069 }
00070
00074 void CloseBinFile(int channel)
00075 {
00076 char line[128];
00077 if (binChannelFile[channel]==NULL)
00078 {
00079 return;
00080 }
00081
00082 UpdateInfoHeader(channel);
00083
00084 fclose(binChannelFile[channel]);
00085 binChannelFile[channel]=NULL;
00086 strcpy(line,FileName("", ".BIN", channel, fileNameOptions));
00087 if (noWrite==0)
00088 {
00089 Rename(binChannelFileName[channel],line);
00090 }
00091 PrintLog("OUTPUT: %s %d samples (%.2fs)\n",line,
00092 infoHeader[channel].npts,
00093 (float)infoHeader[channel].npts/(float)infoHeader[channel].sr.npts);
00094 unlink(binChannelFileName[channel]);
00095 }
00096
00099 void AbortBinFile(int channel)
00100 {
00101 PrintDebug("abort for %s\n",binChannelFileName[channel]);
00102 if (binChannelFile[channel])
00103 {
00104 fclose(binChannelFile[channel]);
00105 binChannelFile[channel]=NULL;
00106 unlink(binChannelFileName[channel]);
00107 }
00108 }
00109
00111 void AddBinData(int channel)
00112 {
00113 int i;
00114 if ((HWConfig.srObs[channel].npts==0)||(HWConfig.srExp[channel].npts==0))
00115 {
00116 return;
00117 }
00118 if (OpenBinChannel(channel))
00119 {
00120 int d;
00121 d=HWConfig.srObs[channel].npts-HWConfig.srExp[channel].npts;
00122 for (i=0; i<HWConfig.srExp[channel].npts; i++)
00123 {
00124 float tmpf;
00125 tmpf=(float)HWConfig.data[channel][d+i];
00126 if (1!=fwrite(&tmpf,sizeof(tmpf),1,binChannelFile[channel]))
00127 {
00128 PrintError("unable to write to %s: %m\n",
00129 binChannelFileName[channel]);
00130 AbortBinFile(channel);
00131 }
00132 }
00133 infoHeader[channel].npts+=HWConfig.srExp[channel].npts;
00134 }
00135 }