/* changes * 01 APR 2004 - forced wsac1 to set depmax depmin depmen * 16 JAN 2005 - introduced brsach, arsach to just get the header information This is required by the program saclhdr which does not have to read the data just the header * 10 NOV 2005 - now entry for wsac1 in sacsubc.h and the wsac1 call to bwsac did not specify the numebr of data points */ #ifndef SACSUB_C #define SACSUB_C #include #include #include #include #include #include "sacsubc.h" #include struct sachdr_ sachdr; #ifdef MSDOS #include #endif /* string patterns */ static int NRSTR=70; char *rstr[] = { "DELTA ", "DEPMIN ", "DEPMAX ", "SCALE ", "ODELTA ", "B ", "E ", "O ", "A ", "FMT ", "T0 ", "T1 ", "T2 ", "T3 ", "T4 ", "T5 ", "T6 ", "T7 ", "T8 ", "T9 ", "F ", "RESP0 ", "RESP1 ", "RESP2 ", "RESP3 ", "RESP4 ", "RESP5 ", "RESP6 ", "RESP7 ", "RESP8 ", "RESP9 ", "STLA ", "STLO ", "STEL ", "STDP ", "EVLA ", "EVLO ", "EVEL ", "EVDP ", "MAG ", "USER0 ", "USER1 ", "USER2 ", "USER3 ", "USER4 ", "USER5 ", "USER6 ", "USER7 ", "USER8 ", "USER9 ", "DIST ", "AZ ", "BAZ ", "GCARC ", "SB ", "SDELTA ", "DEPMEN ", "CMPAZ ", "CMPINC ", "XMINIMUM", "XMAXIMUM", "YMINIMUM", "YMAXIMUM", "ADJTM ", "FHDR65 ", "FHDR66 ", "FHDR67 ", "FHDR68 ", "FHDR69 ", "FHDR70 " }; static int NISTR=40; char *istr[] = { "NZYEAR ", "NZJDAY ", "NZHOUR ", "NZMIN ", "NZSEC ", "NZMSEC ", "NVHDR ", "NINF ", "NHST ", "NPTS ", "NSNPTS ", "NSN ", "NXSIZE ", "NYSIZE ", "NHDR15 ", "IFTYPE ", "IDEP ", "IZTYPE ", "IHDR4 ", "IINST ", "ISTREG ", "IEVREG ", "IEVTYP ", "IQUAL ", "ISYNTH ", "IHDR11 ", "IHDR12 ", "IHDR13 ", "IHDR14 ", "IHDR15 ", "IHDR16 ", "IHDR17 ", "IHDR18 ", "IHDR19 ", "IHDR20 ", "LEVEN ", "LPSPOL ", "LOVROK ", "LCALDA ", "LHDR5 " }; static int NCSTR=24; char *cstr[] = { "KSTNM ", "KEVNM ", "KEVNMC ", "KHOLE ", "KO ", "KA ", "KT0 ", "KT1 ", "KT2 ", "KT3 ", "KT4 ", "KT5 ", "KT6 ", "KT7 ", "KT8 ", "KT9 ", "KF ", "KUSER0 ", "KUSER1 ", "KUSER2 ", "KCMPNM ", "KNETWK ", "KDATRD ", "KINST " }; static int NESTR=50; char *estr[] = { "ITIME ", "IRLIM ", "IAMPH ", "IXY ", "IUNKN ", "IDISP ", "IVEL ", "IACC ", "IB ", "IDAY ", "IO ", "IA ", "IT0 ", "IT1 ", "IT2 ", "IT3 ", "IT4 ", "IT5 ", "IT6 ", "IT7 ", "IT8 ", "IT9 ", "IRADNV ", "ITANNV ", "IRADEV ", "ITANEV ", "INORTH ", "IEAST ", "IHORZA ", "IDOWN ", "IUP ", "ILLLBB ", "IWWSN1 ", "IWWSN2 ", "IHGLP ", "ISRO ", "INUCL ", "IPREN ", "IPOSTN ", "IQUAKE ", "IPREQ ", "IPOSTQ ", "ICHEM ", "IOTHER ", "IGOOD ", "IGLCH ", "IDROP ", "ILOWSN ", "IRLDTA ", "IVOLTS " } ; static int NIVAL=50; char *Istr[] = { "IFTYPE ", "IFTYPE ", "IFTYPE ", "IFTYPE ", "IDEP ", "IDEP ", "IDEP ", "IDEP ", "IZTYPE ", "IZTYPE ", "IZTYPE ", "IZTYPE ", "IZTYPE ", "IZTYPE ", "IZTYPE ", "IZTYPE ", "IZTYPE ", "IZTYPE ", "IZTYPE ", "IZTYPE ", "IZTYPE ", "IZTYPE ", "IRADNV ", "ITANNV ", "IRADEV ", "ITANEV ", "INORTH ", "IEAST ", "IHORZA ", "IDOWN ", "IUP ", "ILLLBB ", "IWWSN1 ", "IWWSN2 ", "IHGLP ", "ISRO ", "IEVTYP ", "IEVTYP ", "IEVTYP ", "IEVTYP ", "IEVTYP ", "IEVTYP ", "IEVTYP ", "IQUAL ", "IQUAL ", "IQUAL ", "IQUAL ", "IQUAL ", "ISYNTH ", "IDEP " }; float fhdr_default = -12345.; int ihdr_default = -12345 ; char *chdr_default = "-12345 "; void brsac (int LN,char *name,float **data,int *nerr) /* LN I*4 length of data array name C* Name of file to be opened data R*4 Array of trace values nerr I*4 -1 file does not exist -2 data points in file exceed dimension -3 file is not a SAC binary file NOTE IF THE BINARY FILE HAS MORE THAN LN POINTS, THEN ONLY LN POINTS ARE USED This routine reads waveform data written in SAC binary format. Adapted from FORTRAN version written by by Hafidh A. A. Ghalib, 1988. */ { int maxpts, nread; int i; int has12345; FILE *fptr; /* determine if the file exists for reading */ if((fptr=fopen(name,"rb")) == NULL){ sachdr.ihdr[ 9] = 0; *nerr = -1; perror("fopen error in brsac:"); return; } #ifdef MSDOS setmode(fileno(fptr), O_BINARY); #endif /* file exists get header information only */ *nerr = 0; if(fread(&sachdr,sizeof( struct sachdr_),1,fptr)!=1){ *nerr=-3; fclose(fptr); return; } /* ensure that we have enough space */ if(sachdr.ihdr[ 9] > LN){ maxpts = LN ; sachdr.ihdr[ 9] = LN ; *nerr = -2 ; } else { maxpts = sachdr.ihdr[ 9] ; *nerr = 0 ; } /* there must be at least one -12345 for this to be a sac file!! */ has12345 = 0; for (i=0;i < 70 ; i++){ if(sachdr.rhdr[i] == -12345.0)has12345++; } for (i=0;i < 40 ; i++){ if(sachdr.ihdr[i] == -12345)has12345++; } for (i=0;i < 24 ; i++){ if(strncmp(sachdr.chdr[i], "-12345 ",8)==0)has12345++; } if(has12345 == 0){ *nerr = -3; fclose(fptr); return; } /* allocate the data values */ if((*data = (float *)calloc(maxpts,sizeof(float))) == NULL){ *nerr = -2; fclose(fptr); return; } nread = fread(*data,sizeof(float),maxpts,fptr); fclose (fptr) ; /* safety */ if(sachdr.ihdr[9] > LN){ maxpts = LN; sachdr.ihdr[ 9] = LN; } else { maxpts = sachdr.ihdr[ 9]; } } void brsach(char *name,int *nerr) /* name C* Name of file to be opened nerr I*4 -1 file does not exist -2 data points in file exceed dimension -3 file is not a SAC binary file NOTE IF THE BINARY FILE HAS MORE THAN LN POINTS, THEN ONLY LN POINTS ARE USED This routine reads waveform data written in SAC binary format. Adapted from FORTRAN version written by by Hafidh A. A. Ghalib, 1988. */ { int maxpts, nread; int i; int has12345; FILE *fptr; /* determine if the file exists for reading */ if((fptr=fopen(name,"rb")) == NULL){ sachdr.ihdr[ 9] = 0; *nerr = -1; perror("fopen error in brsac:"); return; } #ifdef MSDOS setmode(fileno(fptr), O_BINARY); #endif /* file exists get header information only */ *nerr = 0; if(fread(&sachdr,sizeof( struct sachdr_),1,fptr)!=1){ *nerr=-3; fclose(fptr); return; } /* there must be at least one -12345 for this to be a sac file!! */ has12345 = 0; for (i=0;i < 70 ; i++){ if(sachdr.rhdr[i] == -12345.0)has12345++; } for (i=0;i < 40 ; i++){ if(sachdr.ihdr[i] == -12345)has12345++; } for (i=0;i < 24 ; i++){ if(strncmp(sachdr.chdr[i], "-12345 ",8)==0)has12345++; } if(has12345 == 0){ *nerr = -3; fclose(fptr); return; } fclose (fptr) ; } void bwsac (int LN,char *name,float *data) /* LN I*4 length of data array name C* Name of file to be opened data R*4 Array of trace values This routine writes waveform data written in SAC binary format. Adapted from FORTRAN version written by by Hafidh A. A. Ghalib, 1988. */ { int nwrite; FILE *fptr; if((fptr=fopen(name,"wb")) == NULL){ perror("fopen error in bwsac:"); return; } #ifdef MSDOS setmode(fileno(fptr), O_BINARY); #endif fwrite(&sachdr,sizeof( struct sachdr_),1,fptr); nwrite = fwrite(data,sizeof(float),LN,fptr); fclose (fptr) ; } void arsac (int LN,char *name,float **data,int *nerr) /* IRU I*4 FILE handle for IO LN I*4 length of data array name C* Name of file to be opened data R*4 Array of trace values nerr I*4 -1 file does not exist -2 data points in file exceed dimension -3 file is not a SAC ascii file NOTE IF THE ASCII FILE HAS MORE THAN LN POINTS, THEN ONLY LN POINTS ARE USED This routine reads waveform data written in SAC ascii format. Adapted from FORTRAN version written by by Hafidh A. A. Ghalib, 1988. */ { int maxpts, nread; int i, j, j1, j2, k, l; int has12345; FILE *fptr; float rval; int ival; char cval[9]; char cval0[9], cval1[9], cval2[9]; char cstr[81]; char fstr[16]; char *endptr; int ls; /* determine if the file exists for reading */ if((fptr=fopen(name,"r")) == NULL){ sachdr.ihdr[ 9] = 0; *nerr = -1; perror("fopen error in arsac:"); return; } /* file exists get header information only */ *nerr = 0; /* this is ugly - SAC ascii was originally a FORTRAN specification scanf likes field separators so problems with reading a FORTRAN 4g15.7 */ /* read in float header values 5 per line */ for(i=0;i< NRSTR; i+=5){ fgets(cstr,80,fptr); for(k=0,j=0;k<5;k++,j+=15){ strncpy(fstr,&cstr[j],15); fstr[15] = '\0'; sachdr.rhdr[i+k] = (float)strtod(fstr,&endptr); } } /* read in integer header values 5 per line */ for(i=0;i< NISTR; i+=5){ fgets(cstr,80,fptr); for(k=0,j=0;k<5;k++,j+=10){ strncpy(fstr,&cstr[j],10); fstr[10] = '\0'; sachdr.ihdr[i+k] = (int)strtol(fstr,&endptr,10); } } /* read in strings - 3 eight character strings per line */ for(i=0;i< NCSTR; i+=3){ /* use fgets to get a string - scanf ignores a valid blank field */ fgets(cstr, 80, fptr); strncpy(cval0,&cstr[ 0],8); strncpy(cval1,&cstr[ 8],8); strncpy(cval2,&cstr[16],8); cval0[8] = '\0'; cval1[8] = '\0'; cval2[8] = '\0'; for(k=0 ; k < 3 ; k++){ switch(k){ case 0: strncpy(&cval[0],cval0,9); break; case 1: strncpy(&cval[0],cval1,9); break; case 2: strncpy(&cval[0],cval2,9); break; } ls = strlen(cval); /* check for printing characters */ for(l=0; l< 8;l++){ if(isprint(cval[l]) == 0 || l >= ls) cval[l] = ' '; } cval[8] = '\0'; strncpy(sachdr.chdr[i+k], cval, 8); } } /* ensure that we have enough space */ if(sachdr.ihdr[ 9] > LN){ maxpts = LN ; sachdr.ihdr[ 9] = LN ; *nerr = -2 ; } else { maxpts = sachdr.ihdr[ 9] ; *nerr = 0 ; } /* there must be at least one -12345 for this to be a sac file!! */ has12345 = 0; for (i=0;i < 70 ; i++){ if(sachdr.rhdr[i] == -12345.0)has12345++; } for (i=0;i < 40 ; i++){ if(sachdr.ihdr[i] == -12345)has12345++; } for (i=0;i < 24 ; i++){ if(strncmp(sachdr.chdr[i], "-12345 ",8)==0)has12345++; } if(has12345 == 0){ *nerr = -3; fclose(fptr); return; } /* allocate the data values */ if((*data = (float *)calloc(maxpts,sizeof(float))) == NULL){ *nerr = -2; fclose(fptr); return; } for(j=0; j< maxpts; j++){ fscanf(fptr,"%g",&rval); (*data)[j] = rval; } fclose (fptr) ; /* safety */ if(sachdr.ihdr[9] > LN){ maxpts = LN; sachdr.ihdr[ 9] = LN; } else { maxpts = sachdr.ihdr[ 9]; } } void arsach(char *name,int *nerr) /* name C* Name of file to be opened nerr I*4 -1 file does not exist -2 data points in file exceed dimension -3 file is not a SAC ascii file NOTE IF THE ASCII FILE HAS MORE THAN LN POINTS, THEN ONLY LN POINTS ARE USED This routine reads waveform data written in SAC ascii format. Adapted from FORTRAN version written by by Hafidh A. A. Ghalib, 1988. */ { int maxpts, nread; int i, j, j1, j2, k, l; int has12345; FILE *fptr; float rval; int ival; char cval[9]; char cval0[9], cval1[9], cval2[9]; char cstr[81]; char fstr[16]; char *endptr; int ls; /* determine if the file exists for reading */ if((fptr=fopen(name,"r")) == NULL){ sachdr.ihdr[ 9] = 0; *nerr = -1; perror("fopen error in arsac:"); return; } /* file exists get header information only */ *nerr = 0; /* this is ugly - SAC ascii was originally a FORTRAN specification scanf likes field separators so problems with reading a FORTRAN 4g15.7 */ /* read in float header values 5 per line */ for(i=0;i< NRSTR; i+=5){ fgets(cstr,80,fptr); for(k=0,j=0;k<5;k++,j+=15){ strncpy(fstr,&cstr[j],15); fstr[15] = '\0'; sachdr.rhdr[i+k] = (float)strtod(fstr,&endptr); } } /* read in integer header values 5 per line */ for(i=0;i< NISTR; i+=5){ fgets(cstr,80,fptr); for(k=0,j=0;k<5;k++,j+=10){ strncpy(fstr,&cstr[j],10); fstr[10] = '\0'; sachdr.ihdr[i+k] = (int)strtol(fstr,&endptr,10); } } /* read in strings - 3 eight character strings per line */ for(i=0;i< NCSTR; i+=3){ /* use fgets to get a string - scanf ignores a valid blank field */ fgets(cstr, 80, fptr); strncpy(cval0,&cstr[ 0],8); strncpy(cval1,&cstr[ 8],8); strncpy(cval2,&cstr[16],8); cval0[8] = '\0'; cval1[8] = '\0'; cval2[8] = '\0'; for(k=0 ; k < 3 ; k++){ switch(k){ case 0: strncpy(&cval[0],cval0,9); break; case 1: strncpy(&cval[0],cval1,9); break; case 2: strncpy(&cval[0],cval2,9); break; } ls = strlen(cval); /* check for printing characters */ for(l=0; l< 8;l++){ if(isprint(cval[l]) == 0 || l >= ls) cval[l] = ' '; } cval[8] = '\0'; strncpy(sachdr.chdr[i+k], cval, 8); } } /* there must be at least one -12345 for this to be a sac file!! */ has12345 = 0; for (i=0;i < 70 ; i++){ if(sachdr.rhdr[i] == -12345.0)has12345++; } for (i=0;i < 40 ; i++){ if(sachdr.ihdr[i] == -12345)has12345++; } for (i=0;i < 24 ; i++){ if(strncmp(sachdr.chdr[i], "-12345 ",8)==0)has12345++; } if(has12345 == 0){ *nerr = -3; fclose(fptr); return; } /* allocate the data values */ fclose (fptr) ; } void awsac (int LN,char *name,float *data) /* LN I*4 length of data array name C* Name of file to be opened data R*4 Array of trace values This routine writes waveform data written in SAC binary format. Adapted from FORTRAN version written by by Hafidh A. A. Ghalib, 1988. */ { int nwrite; FILE *fptr; int i, j, j1, j2, k; char cval[9]; float zero; if((fptr=fopen(name,"w")) == NULL){ perror("fopen error in awsac:"); return; } /* write real header block */ for(j=0 ; j < NRSTR; ){ fprintf(fptr,"%#15.7g",sachdr.rhdr[j]); j++; if( (j%5) == 0) fprintf(fptr,"\n"); } /* write integer header block */ j1 = 0; j2 = 5; for(i=0 ; i < 8 ; i++){ for(j=j1 ; j < j2 ; j++) fprintf(fptr,"%10d",sachdr.ihdr[j]); fprintf(fptr,"\n"); j1 += 5; j2 += 5; } /* write character header block */ j1 = 0; j2 = 3; for(i=0 ; i < 8 ; i++){ for(j=j1 ; j < j2 ; j++){ for(k=0;k<8;k++){ if(isprint(sachdr.chdr[j][k])) cval[k] = sachdr.chdr[j][k]; else cval[k] = ' '; } cval[8] = '\0'; fprintf(fptr,"%8s",cval); } fprintf(fptr,"\n"); j1 += 3; j2 += 3; } j1 = 0; j2 = 4; zero = 0.0; for(i=0 ; i < LN; i+= 5){ for(j=i ; j < i+5; j++){ if(j < LN ) fprintf(fptr,"%#15.7g",data[j]); else fprintf(fptr,"%#15.7g",zero); } fprintf(fptr,"\n"); } fclose (fptr) ; } void getfhv(char *strcmd,float *fval,int *nerr) /* Get float header value strcmd C*8 String to key on fval R*4 Real value returned nerr I*4 Error condition 0 no error 1336 Value not defined 1337 Header variable does not exist */ { int i; *nerr = -1; *fval = -12345. ; for(i=0;i< NRSTR ;i++){ if(streql(strcmd,rstr[i])) { *fval = sachdr.rhdr[i]; *nerr = 0; break ; } } } void getnhv(char *strcmd,int *ival,int *nerr) /* Get integer header value strcmd C*8 String to key on ival R*4 Real value returned nerr I*4 Error condition 0 no error 1336 Value not defined 1337 Header variable does not exist */ { int i; *ival = -12345 ; *nerr = -1; for(i=0;i< NISTR ;i++){ if(streql(strcmd,istr[i])) { *ival = sachdr.ihdr[i]; *nerr = 0; break ; } } } void getkhv(char *strcmd,char *cval,int *nerr) /* Get character header value strcmd C*8 String to key on cval C Real value returned nerr I*4 Error condition 0 no error 1336 Value not defined 1337 Header variable does not exist */ { int i,j; *nerr = -1; strncpy(cval,"-12345 ",8) ; for(i=0;i< NCSTR ;i++){ if(streql(strcmd,cstr[i])) { strncpy(cval,sachdr.chdr[i],8); /* force proper C string */ cval[8] = '\0'; /* fix 14 AUG 2007 */ for(j=0;j<8;j++){ if(cval[j] < 32)cval[j] = ' '; } *nerr = 0; break ; } } } void getlhv(char *strcmd,int *lval,int *nerr) /* Get logical header value strcmd C*8 String to key on lval I*4 Real value returned nerr I*4 Error condition 0 no error 1336 Value not defined 1337 Header variable does not exist */ { int ival; *nerr = -1; getnhv(strcmd,&ival,nerr); if(ival == 0) *lval = False; else *lval = True; } void getihv(char *strcmd,char *strval,int *nerr) /* Get enumerated header value strcmd C*8 String to key on strval C*8 real value set nerr I*4 Error condition 0 no error 1336 Header variable undefined 1337 Header variable does not exist */ { int nval; getnhv(strcmd,&nval,nerr); strcpy(strval," "); if(*nerr == 0){ if(nval >= 1 && nval <= NESTR){ strncpy(&strval[0],estr[nval -1],8); strval[9] = '\0'; } } } void setfhv(char *strcmd, float fval, int *nerr) /* Set float header value strcmd C*8 String to key on fval R*4 real value set nerr I*4 Error condition 0 no error 1337 Header variable does not exist */ { int i; for(i = 0 ; i < NRSTR; i++) if(streql(strcmd,rstr[i])) { sachdr.rhdr[i] = fval; break; } } void setnhv(char *strcmd, int ival, int *nerr) /* Set integer header value strcmd C*8 String to key on ival I*4 integer value set nerr I*4 Error condition 0 no error 1337 Header variable does not exist */ { int i; for(i = 0 ; i < NISTR; i++) if(streql(strcmd,istr[i])) { sachdr.ihdr[i] = ival; break; } } void setkhv(char *strcmd, char *cval, int *nerr) /* Set integer header value strcmd C*8 String to key on cval I*4 String value set nerr I*4 Error condition 0 no error 1337 Header variable does not exist */ { int i, ls, j; for(i = 0 ; i < NCSTR; i++) if(streql(strcmd,cstr[i])) { ls = strlen(cval); for(j=0;j<8;j++){ if(j < ls) sachdr.chdr[i][j] = cval[j]; else sachdr.chdr[i][j] = ' '; } break; } } void setlhv(char *strcmd, int lval, int *nerr) /* Set integer header value strcmd C*8 String to key on cval I*4 String value set nerr I*4 Error condition 0 no error 1337 Header variable does not exist */ { if(lval == 0) setnhv(strcmd,0,nerr); else setnhv(strcmd,1,nerr); } void setihv(char *strcmd, char *strval, int *nerr) /* Set enumerated header value strcmd C*8 String to key on strval C*8 real value set nerr I*4 Error condition 0 no error 1336 Header variable undefined 1337 Header variable does not exist */ { int i; if(streql(strcmd,"IDEP ") && streql(strval,"IUNKN ")) setnhv("IDEP ",5,nerr); else if(streql(strcmd,"IZTYPE ") && streql(strval,"IUNKN ")) setnhv("IZTYPE ",5,nerr); else if(streql(strcmd,"IEVTYP ") && streql(strval,"IOTHER ")) setnhv("IEVTYP ",44,nerr); else if(streql(strcmd,"IQUAL ") && streql(strval,"IOTHER ")) setnhv("IWUAL ",44,nerr); else { *nerr = 1336; /* IFTYPE */ for(i=0 ; i < NESTR; i++){ if(streql(strcmd,Istr[i])&&streql(strval,estr[i])){ setnhv(strcmd,i+1,nerr); break; } } } } void newhdr() { inihdr(); sachdr.ihdr[15] = 1; /* ITIME */ sachdr.ihdr[35] = 1; /* LEVEN = TRUE */ sachdr.ihdr[37] = 1; /* LOVROK = TRUE */ sachdr.ihdr[38] = 1; /* LCALDA = TRUE */ } void inihdr() /* initialize sac header */ { int i,j; for(i=0 ; i < NRSTR; i++) sachdr.rhdr[i] = fhdr_default; for(i=0 ; i < NISTR; i++) sachdr.ihdr[i] = ihdr_default; sachdr.ihdr[6] = 6; sachdr.ihdr[7] = 0; sachdr.ihdr[8] = 0; for(i=35 ; i < 40; i++) sachdr.ihdr[i] = 0; for(i=0 ; i < NCSTR; i++) strncpy(sachdr.chdr[i],chdr_default,8); } void wsac1(char *ofile,float *y,int npts,float btime,float dt,int *nerr) { /* c----- c PURPOSE: WRITE AN EVENLY SPACED SAC FILE c c write a binary sac file with evenly sampled data c ofile Char name of file c y R array of values c npts I number of points in data c btime R start time c dt R sample interval c nerr I error return c----- */ float e; float depmax, depmin, depmen; scmxmn(y,npts,&depmax,&depmin,&depmen); newhdr(); setfhv("DEPMAX", depmax, nerr); setfhv("DEPMIN", depmin, nerr); setfhv("DEPMEN", depmen, nerr); setnhv("NPTS ",npts,nerr); setfhv("DELTA ",dt ,nerr); setfhv("B ",btime ,nerr); setihv("IFTYPE ","ITIME ",nerr); e = btime + (npts -1 )*dt; setfhv("E ",e ,nerr); setlhv("LEVEN ",1,nerr); setlhv("LOVROK ",1,nerr); setlhv("LCALDA ",1,nerr); bwsac(npts,ofile,y); *nerr = 0; } int streql(char *str1, char *str2) { int l1, l2,i; int retval; char str_1[9], str_2[9]; l1 = strlen(str1); if(l1<0)l1=0; if(l1>8)l1=8; for(i=0;i<8;i++){ if(i < l1) str_1[i] = str1[i]; else str_1[i] = ' '; } str_1[8] = '\0'; l2 = strlen(str2); if(l2<0)l2=0; if(l2>8)l2=8; for(i=0;i<8;i++){ if(i < l2) str_2[i] = str2[i]; else str_2[i] = ' '; } str_2[8] = '\0'; if(strncmp(str_1, str_2, 8) == 0) return(True); return (False); } void scmxmn(float *x, int npts, float *depmax, float *depmin, float *depmen) { int i; double sum; *depmax = -1.0e+38 ; *depmin = 1.0e+38 ; sum = 0.0e+00 ; for( i=0 ; i < npts ; i++){ if( x[i] > *depmax) *depmax = x[i] ; if( x[i] < *depmin) *depmin = x[i] ; sum += x[i] ; } if(npts > 0) *depmen = sum / npts ; else *depmen = -12345. ; } #endif /* sacsubc.h */