⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readseed.c

📁 基于visual c编辑的读取地震波形(行业化标准)原代码,
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <windows.h>  
#include <string.h>
#include <stdio.h>
#include <io.h>
#include <stdlib.h>
#include <commdlg.h>
#include "resource.h"    
#include "steim.h"
#include "steimlib.h"
#include "miniseed.h"
#include "my_time.h"
#include "response.h"
#include "station.h"
char DIRNAME[100];
HWND hWnd;
HINSTANCE hInst;
char Data[4096];
void save_wgse(void){;}
void save_sac(FILE * Sac,daat dd,int *ddd,int sp ,char *stan,char *chan,char *ntype,double rate)
{
int i;
float sacf[70];
int saci  [35];
int sacl[5];
char sacc1[8];
char sacc2[16];
char saca[21][8];
for(i=0;i<70;i++)sacf[i]=(float)(-12345.);
for(i=0;i<35;i++)saci[i]=-12345;
for(i=0;i<5;i++)sacl[i]=0;
sprintf(sacc1,"-12345");
sprintf(sacc2,"-12345");
for(i=0;i<21;i++)sprintf(saca[i],"-12345");
saci[9]=sp;
sacf[0]=(float)(rate/1000.);
sacf[5]=(float)0.;
sacf[6]=(float)((sp-1)*rate/1000.);
saci[15]=1;
sacl[0]=1;
saci[16]=5;
saci[17]=9;
sprintf(sacc1,"%s",stan);
sprintf(saca[17],"%s",chan);
for(i=0;i<6;i++)saci[i]=cdatostrj(dd,i);
saci[6]=6;

for(i=0;i<70;i++)
{
	if(i!=0&&i%5==0)fprintf(Sac,"\n");
	fprintf(Sac,"%15.7f",sacf[i]);
}

for(i=0;i<35;i++)
{
	if(i%5==0)fprintf(Sac,"\n");
	fprintf(Sac,"%10d",saci[i]);
}

for(i=0;i<5;i++)
{
	if(i%5==0)fprintf(Sac,"\n");
	fprintf(Sac,"%10d",sacl[i]);
}

fprintf(Sac,"\n%8s%16s",sacc1,sacc2);
for(i=0;i<21;i++)
{if(i%3==0)fprintf(Sac,"\n");
fprintf(Sac,"%8s",saca[i]);
}
for(i=0;i<sp;i++)
{
if(i%5==0)fprintf(Sac,"\n");
fprintf(Sac,"%15.7g",(double)ddd[i]);
}
fprintf(Sac,"\n");
}
/*void save_wgsn(FILE * Wgsn,daat dd,int *ddd,int sp ,char *stan,char *chan,char *ntype,double rate)
{
int i;
double sensetiv,period;
char lookup[80];



if(getrespdate("response.ini",cdatostrj(dd,0),cdatostrj(dd,1),chan,stan,ntype,lookup)!=0)
{sensetiv=period=1.;}
else 
if(getoldsens("response.ini",lookup,&sensetiv,&period)!=0)
{sensetiv=period=1.;}

	fprintf(Wgsn,"%s %s %d %d %d %d %d %d %g %d %g %g %s\n\n",
		stan,chan,
		cdatostrj(dd,0)-1900,
		cdatostrj(dd,1),
		cdatostrj(dd,2),
		cdatostrj(dd,3),
		cdatostrj(dd,4),
		cdatostrj(dd,5),
		1000./rate,
		sp,
		sensetiv,
		period,
		"ASL");
for(i=0;i<sp;i++)
fprintf(Wgsn,"%d\n",ddd[i]);
}*/

int save_wgsn_new(FILE * WgsnN,daat dd,int *ddd,int sp ,char *stan,char *chan,char *ntype,double rate)
{
char tmpstr[80];
char lookup[80];
char type[80];
double lat,lon,depth,azim,dip,elev;
double nfactor,nfreq,re,im,sens,fsens;
int i,np,nz;
fprintf(WgsnN,"ASL_00\n");
fprintf(WgsnN,"%s %s %s\n",stan,ntype,chan);
fprintf(WgsnN,"%s\n",cdatostr(dd,tmpstr,0));
fprintf(WgsnN,"%d\n",sp);
fprintf(WgsnN,"%g\n",rate);
if(getrespdate("response.ini",cdatostrj(dd,0),cdatostrj(dd,1),chan,stan,ntype,lookup)!=0)
goto Err;
if(get_type(lookup,type,"response.ini")!=0)
goto Err;
fprintf(WgsnN,"%s\n",type);
if(get_nfactor(lookup,&nfactor,"response.ini")!=0)goto Err;
fprintf(WgsnN,"%g\n",nfactor);
if(get_nfreq(lookup,&nfreq,"response.ini")!=0)goto Err;
fprintf(WgsnN,"%g\n",nfreq);
if(get_sens(lookup,&sens,"response.ini")!=0)goto Err;
fprintf(WgsnN,"%g\n",sens);
if(get_fsens(lookup,&fsens,"response.ini")!=0)goto Err;
fprintf(WgsnN,"%g\n",fsens);
if(get_nzeros(lookup,&nz,"response.ini")!=0)goto Err;
if(get_npoles(lookup,&np,"response.ini")!=0)goto Err;
fprintf(WgsnN,"%d %d\n",nz,np);
for(i=0;i<nz;i++)
{
if(get_zeroi(lookup,i,&re,&im,"response.ini")!=0)goto Err;
fprintf(WgsnN,"%g %g\n",re,im);
}

for(i=0;i<np;i++)
{
if(get_polei(lookup,i,&re,&im,"response.ini")!=0)goto Err;
fprintf(WgsnN,"%g %g\n",re,im);
}
if(getstandate("station.ini",cdatostrj(dd,0),cdatostrj(dd,1),chan,stan,ntype,lookup)!=0)
goto Err;
if(get_lat(lookup,&lat,"station.ini")!=0)goto Err;
if(get_lon(lookup,&lon,"station.ini")!=0)goto Err;
if(get_elev(lookup,&elev,"station.ini")!=0)goto Err;
if(get_depth(lookup,&depth,"station.ini")!=0)goto Err;
if(get_azim(lookup,&azim,"station.ini")!=0)goto Err;
if(get_dip(lookup,&dip,"station.ini")!=0)goto Err;
fprintf(WgsnN,"%g %g %g %g %g %g\n",lat,lon,elev,depth,azim,dip);
for(i=0;i<sp;i++)
fprintf(WgsnN,"%d\n",ddd[i]);
return 0;
Err:
fseek(WgsnN,0,SEEK_SET);
fprintf(WgsnN,"FERROR\n");
return -1;
}



LONG decode_SEED_micro_header (SEED_data_record *sdr, SHORT *firstframe, SHORT *level, SHORT *flip, SHORT *dframes)
   {
   
      SHORT             hfirstdata, hfirstblockette, h1000 ;
      LONG              headertotal ;

	  
	  *flip=1;
	  
      /*
       *
       * decide whether this computer needs to "flip" the data for internal processing.
       * note that the kind of flipping will not work for hermaphroditic computers like a PDP-11
       * that can't make up its mind. it's either intel/vax or sensible order.
       */


      
            headertotal = swapb (sdr->Head.samples_in_record) ;
            hfirstdata = swapb (sdr->Head.first_data_byte) ;
            hfirstblockette = swapb (sdr->Head.first_blockette_byte) ;
            h1000 = swapb (sdr->Head.DOB.blockette_type) ;
		
          
        
		
      if ((hfirstdata % sizeof(compressed_frame)) != 0)
        {
            //printf ("first data does not begin on frame boundary!\n") ;
            return -2;
        }
      *firstframe = hfirstdata/sizeof(compressed_frame) - 1 ;
      /*
       * if a data-only blockette is present, read the encoding format and
       * record length from it. otherwise, the caller's default level will not be changed.
       * similarly, do not overwrite the caller's default number of data frames if the
       * blockette 1000 is not present.
       */
      if ((hfirstblockette == 48) && (h1000 == 1000))
            {
                switch (sdr->Head.DOB.encoding_format)
                {
                    case 10 :
                        *level = 1 ;
                        break ;
                    case 11 :
                        *level = 2 ;
                        break ;
                    /*
                     * this format code must be defined by the FDSN SEED working group
                     * for level 3 compression.
                     */
                    case 20 :
                        *level = 3 ;
                        break ;
                    default :
                       // printf ("unknown encoding format %d\n",(int)sdr->Head.DOB.encoding_format) ;
                        return -3 ;
                        break ;
                }
                switch (sdr->Head.DOB.rec_length)
                {
                    case 12 :
                        *dframes = 63 ;
                        break ;
                    case 11 :
                        *dframes = 31 ;
                        break ;
                    case 10 :
                        *dframes = 15 ;
                        break ;
                    case  9 :
                        *dframes = 7 ;
                        break ;
                    case 8 :
                        *dframes = 3 ;
                        break ;
                    case 7 :
                        *dframes = 1 ;
                        break ;
                    default :
                        //printf ("unknown record length code %d\n",(int)sdr->Head.DOB.rec_length) ;
                        return -4 ;
                        break ;
                }
            }
      return (headertotal) ;
    }




    LONG validate_frames (SHORT firstframe, SHORT level, SHORT dframes) 
   {
      if ((dframes < 1) || (dframes >= MAXSEEDFRAMES))
        {
          //printf("illegal number of data frames specified!\n");
          return -11;
        }
      if ((firstframe < 0) || (firstframe > dframes))
        {
          //printf("illegal first data frame!\n");
          return -12;
        }
      if ((level < 1) || (level > 3))
        {
          //printf("illegal compression level!\n");
          return -13;
        }
    }


  LONG sreadseed(SHORT Level,SHORT Dframes,SEED_data_record *sdr,LONG *udata)
  {
     
      
      LONG                      rectotal, headertotal ;
      SHORT                     dstat ;
      SHORT                     firstframe, flip, level ;
      dcptype                   dcp[1] ;
      SHORT                     dframes ;
      int chindex;





	  for (chindex = 0; chindex < 1; chindex++)
        if ((dcp[chindex] = init_generic_decompression ()) == NULL )
            return -1;


      
  
     level = Level ;
     dframes = Dframes ;
      
     

	 headertotal = decode_SEED_micro_header (sdr, &firstframe, &level, &flip, &dframes) ;

			  if(headertotal<=0)return headertotal;
			    
            
              rectotal = decompress_generic_record ((generic_data_record *)sdr, udata, &dstat, dcp[0],
                                                    firstframe, headertotal, level, flip, dframes) ;
              
              if (dferrorfatal(dstat,NULL))
                      {
              
                        return -103 ;
                      } ;

   return rectotal;           
                }









daat confromstr(char *string)
{	char tmpstr[80];
	daat d;
	int yy,mm,dd,hh,mi,ss,ts;
	sscanf(string,"%4d.%2d.%2d %2d:%2d:%2d.%d",&yy,&mm,&dd,&hh,&mi,&ss,&ts);
	sprintf(tmpstr,"%04d%02d%02d%02d%02d%02d%04d",yy,mm,dd,hh,mi,ss,ts*10);
	d=cstrtoda(tmpstr);
	return d;
}
long dec_h(SEED_data_record *sdr,char *ntype,char *stname,char *chname,daat *d1,daat *d2,char *chfilter,char *stfilter,int filter,double *rate)
{
int yy,dd,hh,mi,ss,ts;
SHORT samples;
SHORT rfactor,rmultip;
char startdat[80]; 

if(sdr->Head.seed_record_type!='D'){
return -1;}
sprintf(stname,"%c%c%c%c%c",
sdr->Head.station_ID_call_letters [0],
sdr->Head.station_ID_call_letters [1],
sdr->Head.station_ID_call_letters [2],
sdr->Head.station_ID_call_letters [3],
sdr->Head.station_ID_call_letters [4]
);
sprintf(chname,"%c%c%c",
sdr->Head.channel_ID [0],
sdr->Head.channel_ID [1],
sdr->Head.channel_ID [2]);
if(strcmp(chname,"LOG")==0)
{return -1;}

sprintf(ntype,"%c%c",
		sdr->Head.seednet[0],
		sdr->Head.seednet[1]);
if(ntype[0]==' ' &&ntype[1]==' '){ntype[0]='I';ntype[1]='U';}


hh=sdr->Head.starting_time.hr;
mi=sdr->Head.starting_time.minute;
ss=sdr->Head.starting_time.seconds;
dd=swapb(sdr->Head.starting_time.jday);
ts=swapb(sdr->Head.starting_time.tenth_millisec );
yy=swapb(sdr->Head.starting_time.yr);	
samples  = swapb (sdr->Head.samples_in_record) ;
rfactor=swapb(sdr->Head.sample_rate_factor);
rmultip	=swapb(sdr->Head.sample_rate_multiplier );
if(samples==0)return -1;
if(rfactor==0||rmultip==0)return -1;
if(rfactor>0&&rmultip>0)*rate=(double)rfactor*rmultip;
if(rfactor>0&&rmultip<0)*rate=-(double)rfactor/rmultip;
if(rfactor<0&&rmultip>0)*rate=-(double)rmultip/rfactor;
if(rfactor<0&&rmultip<0)*rate=(double)rmultip/rfactor;
if(*rate<=0.)return -1;
else *rate=1000./(*rate);
sprintf(startdat,"%04d%03d%02d%02d%02d%04d",yy,dd,hh,mi,ss,ts);
*d1=cjstrtoda(startdat);
*d2=daatadsec(*d1,(*rate)*samples);
if(stname[0]!=stfilter[0]&&stfilter[0]!='?')return -1;
if(stname[1]!=stfilter[1]&&stfilter[1]!='?')return -1;
if(stname[2]!=stfilter[2]&&stfilter[2]!='?')return -1;
if(stname[3]!=stfilter[3]&&stfilter[3]!='?')return -1;
if(stname[4]!=stfilter[4]&&stfilter[4]!='?')return -1;
if(chname[0]!=chfilter[0]&&chfilter[0]!='?')return -1;
if(chname[1]!=chfilter[1]&&chfilter[1]!='?')return -1;
if(chname[2]!=chfilter[2]&&chfilter[2]!='?')return -1;
if(filter) 
if(((sdr->Head.activity_flags)&(76))==0)return -1;
chname[3]=0;
stname[5]=0;
ntype[2]=0;
return 0;
}

void Getlist(char *list,char *stname,char *chname,daat *d1,daat *d2,int *filepos)
{
int yy,mm,dd,hh,mi,ss,ts,i;
char tmpstr[80];
sscanf(list,"%s %s",stname,chname);
for(i=0;i<5;i++)stname[i]=list[i];stname[5]=0;
for(i=0;i<3;i++)chname[i]=list[i+5];chname[3]=0;
sscanf(list+9,"%4d.%2d.%2d %2d:%2d:%2d.%d",&yy,&mm,&dd,&hh,&mi,&ss,&ts);
sprintf(tmpstr,"%04d%02d%02d%02d%02d%02d%04d",yy,mm,dd,hh,mi,ss,ts*10);
*d1=cstrtoda(tmpstr);
sscanf(list+9+23,"%4d.%2d.%2d %2d:%2d:%2d.%d",&yy,&mm,&dd,&hh,&mi,&ss,&ts);
sprintf(tmpstr,"%04d%02d%02d%02d%02d%02d%04d",yy,mm,dd,hh,mi,ss,ts*10);
*d2=cstrtoda(tmpstr);
sscanf(list+23+9+24,"%d",filepos);
}

int event=0;
int onlin=0;
daat DC1,DC2;
//FILE *outfile;
typedef struct {char info[3];long inin[3];} inform; 
inform aaa;
LRESULT APIENTRY GetStatus(
        HWND hDlg,                /* window handle of the dialog box */
        UINT message,             /* type of message                 */
        UINT wParam,              /* message-specific information    */
        LONG lParam)
{	
	char ST[80];
	char CH[80];
	char NT[80];
	char STLIST[80];
	char CHLIST[80];
	char ssdata[80];
	char sedata[80];
	daat StartList,EndList;
	static int iii;
	int filelist;
	int CurrPoz=0;
	int Udata[MAXSEEDSAMPLES];
	long flength;
	int persent,persent1;

	daat DT1,DT2;
	
	double RTT;
	static int BSIZE=4096;
	FILE *in,*out,*inlog,*outlog;
	int strcount=0;
	int filecount=0;
	int numb;
	long *DATAARRAY;
	int nsamp;
	daat DATASTART;
	
	int NSAMP;
	int i;
	daat currd;
	double raz;
	static SHORT Level=1;
	static SHORT Dframes=63;
char helpdir[200];
	daat d1,d2;
	char tmpstr1[80];
	char tmpstr2[80];
	char tmpstr10[80];
	char tmpstr20[80];
	OPENFILENAME ofn,ofn1;
	char Time1[80],Time2[80];
	static double Rate;
	int SeekPoz;
	int rrr=0;
	static char STATION[80];
	static char CHANNEL[80];
	static char NTYPE[80];
	static char szFile[128];
	static char szFile1[128];
	//static int event=0;
	char szFileTitle[128],szFilter[128];
	char szFileTitle1[128],szFilter1[128];
	char tmpstr[80];		

    switch (message) 
{
       case WM_INITDIALOG:
		  // outfile=fopen("C:\\header.txt","w");
		  SendDlgItemMessage(hDlg,IDC_SGR,BM_SETCHECK,(WPARAM)1,(LPARAM)0) ;
		   SetDlgItemText(hDlg,IDC_BSIZE,"4096");	
		   SetDlgItemText(hDlg,IDC_STAN,"?????");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -