/* Program*/ /* Reading SDAS format*/ #include "css/3.0/wfdiscio.h" #include #include #include #include #include #include "wsgdate.h" #include "head.h" //struct wfdisc wfd[NCHANNEL]; int convert(void *buf, void *newbuf, char newtype[3], long numsamp) { float *fltptr; unsigned short *uintptr; short *intptr, intgr, step, i, dtp; long *lngptr, lng; unsigned long ulng; double *dblptr; int z; if (strcmp("i2", newtype)==0) {dtp=1; intptr=(short*)newbuf;} else if (strcmp("i4", newtype)==0) {dtp=2; lngptr=(long*)newbuf;} else if (strcmp("f4", newtype)==0) {dtp=3; fltptr=(float*)newbuf;} else {dtp=4; dblptr=(double*)newbuf; } uintptr=(unsigned short*)buf; switch (dtp) { case 1: { for(i=0;istr[stype].iFile_size!=0) tlim=ds->str[stype].iFile_size; else tlim=ds->sysprm.Tlim; for(i=0;iN_grp;i++) { chgrp=0; for(j=0;jstr[stype].N_ch;j++) for(k=0;kgrp[i].N_ch;k++) if(ds->str[stype].chan[j]==ds->grp[i].chan[k]) chgrp++; if(ds->grp[i].N_ch==chgrp) {grps[ngrp]=i; ngrp++;} } ofsdat=4608; lseek(rfile, ofsdat, SEEK_SET); hdbuf = malloc(sizeof(Head_rec)+1); hd=(Head_rec *)hdbuf; //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- lseek(rfile, ofsdat, SEEK_SET); read(rfile,bufferi,8);//;sizeof(ds->sced->ti_on.ti_ms)); memcpy(hd->label,bufferi,8);//sizeof(ds->sced[NSCEDULE].sCalib)); read(rfile,buffer,2);//sizeof(hd->i_d)); sbuf=(short*)buffer; hd->i_d=*sbuf; read(rfile,buffer,2);//sizeof(hd->i_mo)); sbuf=(short*)buffer; hd->i_mo=*sbuf; read(rfile,buffer,2);//sizeof(hd->i_y)); sbuf=(short*)buffer; hd->i_y=*sbuf; read(rfile,buffer,2);//sizeof(hd->i_h)); sbuf=(short*)buffer; hd->i_h=*sbuf; read(rfile,buffer,2);//sizeof(hd->i_mi)); sbuf=(short*)buffer; hd->i_mi=*sbuf; read(rfile,buffer,2);//sizeof(hd->i_s)); sbuf=(short*)buffer; hd->i_s=*sbuf; read(rfile,buffer,2);//sizeof(hd->i_ms)); sbuf=(short*)buffer; hd->i_ms=*sbuf; read(rfile,buffer,2);//sizeof(hd->St)); sbuf=(short*)buffer; hd->St=*sbuf; read(rfile,buffer,2);//sizeof(hd->hdsz)); sbuf=(short*)buffer; hd->hdsz=*sbuf; read(rfile,buffer,2);//sizeof(hd->Ncomp)); sbuf=(short*)buffer; hd->Ncomp=*sbuf; read(rfile,buffer,2);//sizeof(hd->freq)); sbuf=(short*)buffer; hd->freq=*sbuf; read(rfile,buffer,4);//sizeof(hd->offs)); ulbuf=(unsigned long*)buffer; hd->offs=*ulbuf; read(rfile,buffer,2);//sizeof(hd->d_d)); sbuf=(short*)buffer; hd->d_d=*sbuf; read(rfile,buffer,2);//sizeof(hd->d_mo)); sbuf=(short*)buffer; hd->d_mo=*sbuf; read(rfile,buffer,2);//sizeof(hd->d_y)); sbuf=(short*)buffer; hd->d_y=*sbuf; read(rfile,buffer,2);//sizeof(hd->d_h)); sbuf=(short*)buffer; hd->d_h=*sbuf; read(rfile,buffer,2);//sizeof(hd->d_mi)); sbuf=(short*)buffer; hd->d_mi=*sbuf; read(rfile,buffer,2);//sizeof(hd->d_s)); sbuf=(short*)buffer; hd->d_s=*sbuf; read(rfile,buffer,2);//sizeof(hd->e_d)); sbuf=(short*)buffer; hd->e_d=*sbuf; read(rfile,buffer,2);//sizeof(hd->e_mo)); sbuf=(short*)buffer; hd->e_mo=*sbuf; read(rfile,buffer,2);//sizeof(hd->e_y)); sbuf=(short*)buffer; hd->e_y=*sbuf; read(rfile,buffer,2);//sizeof(hd->e_h)); sbuf=(short*)buffer; hd->e_h=*sbuf; read(rfile,buffer,2);//sizeof(hd->e_mi)); sbuf=(short*)buffer; hd->e_mi=*sbuf; read(rfile,buffer,2);//sizeof(hd->e_s)); sbuf=(short*)buffer; hd->e_s=*sbuf; read(rfile,buffer,2);//sizeof(hd->nch)); sbuf=(short*)buffer; hd->nch=*sbuf; read(rfile,ubuffer,16);//sizeof(ds->grp[NGROUP].chan[NCHANNEL])); memcpy(hd->gain,ubuffer,16);//sizeof(ds->grp[NGROUP].Type)); read(rfile,buffer,4);//sizeof(hd->lat)); fbuf=(float*)buffer; hd->lat=*fbuf; read(rfile,buffer,4);//sizeof(hd->lon)); fbuf=(float*)buffer; hd->lon=*fbuf; read(rfile,buffer,2);//sizeof(hd->alt)); fbuf=(float *)buffer; hd->alt=*fbuf; read(rfile,buffer,4);//sizeof(ds->SysType)); memcpy(hd->Name,buffer,4);//sizeof(ds->SysType)); read(rfile,buffer,16);//sizeof(ds->SysType)); memcpy(hd->ch,buffer,16);//sizeof(ds->SysType)); read(rfile,buffer,2);//sizeof(hd->secInBlock)); sbuf=(short*)buffer; hd->secInBlock=*sbuf; read(rfile,buffer,148);//sizeof(hd->secInBlock)); //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- yr=hd->i_y; mnth=hd->i_mo; day=hd->i_d; hr=hd->i_h; min=hd->i_mi; mlsec=hd->i_ms; sc=hd->i_s+mlsec; startime=etoh(yr, mnth, day, hr, min, sc); i=0; cursize=ofsdat; // free(hdbuf); // hdbuf = malloc(sizeof(Head_rec)+1); ofsdat+=256; if (strcmp("i2", newtype)==0) {dtype=2;} else if (strcmp("i4", newtype)==0) {dtype=4;} else if (strcmp("f4", newtype)==0) {dtype=4;} else if (strcmp("f8", newtype)==0) {dtype=8;} datbuf = malloc(6000); newbuf = malloc(6500); while(stop!=0) { for(j=0;jgrp[grps[j]].N_ch; k++) { n=j*((ds->grp[grps[j]].N_ch))+k; if(i==0) { printf("Open data-file: %s ... ", name); strcpy(fnams, fnam); p=strrchr(fnams,'.'); p++; sprintf(p,"%s",ds->prm[ds->grp[grps[j]].chan[k]].name); dfile[n] = open(fnams, O_CREAT | O_WRONLY , S_IRWXG | S_IRWXU); if(dfile[n] == -1) { printf("ERROR\n"); free(hdbuf); return(-7); } printf("Ok\n"); printf("Create data-file: %s.\n", name); } else { strcpy(fnams, fnam); p=strrchr(fnams,'.'); p++; sprintf(p,"%s",ds->prm[ds->grp[grps[j]].chan[k]].name); dfile[n] = open(fnams, O_WRONLY, S_IRWXG | S_IRWXU); } f=ds->str[stype].iRec_len*ds->grp[grps[j]].Freq*2; od=ds->str[stype].iRec_len*ds->grp[grps[j]].Freq*dtype; lseek(rfile, ofsdat, SEEK_SET); read(rfile, datbuf, f); convert(datbuf, newbuf, newtype, f/2); ls=lseek(dfile[n], 0, SEEK_END); write(dfile[n], newbuf, od); close(dfile[n]); // free(datbuf); // free(newbuf); ofsdat+=f; f=ds->str[stype].iRec_len*ds->grp[grps[j]].Freq*2; // ofsdat+=f; } cursize=cursize+f*ds->str[stype].N_ch+256; i++; // lseek(rfile, ofsdat, SEEK_SET); // read(rfile, hdbuf, sizeof(Head_rec)); // hd=(Head_rec *)hdbuf; ofsdat+=256; sdat+=od; if(cursize>=fsize /*|| wfd[n].time-wfd[n].endtime == tlim*/) stop=0; } free(hdbuf); free(datbuf); free(newbuf); return(0); }