Daily_QC
read_t_a.c
Go to the documentation of this file.
1 #include "prototypes_new.h"
2 
3 int read_t_a(char *fname,time_t tget,int i)
4 
5 {
6  extern struct dval dval;
7  extern struct tdata tdata[10];
8  extern struct station tstation[1000];
9  extern int max_tstations;
10  FILE *fr;
11  int j,k,ier,m,qual,len,len2;
12  char kbuf[100],*p,*q,*r,buf[100],hb5[10];
13  long t,u;
14  float conv=.0174;
15  double lat,lon;
16  int number_found[6];
17  char parm[10];
18  int type;
19  char pc,datbuf[50],parmbuf[50];
20  int maxk,startk;
21  struct tm *gm;
22  float fval;
23  int kread;
24  int offset;
25 
26  fr=fopen(fname,"r");
27 
28  tdata[i].data_time=tget;
29 
30  gm=gmtime(&tget);
31 
32  tdata[i].ztime=(gm->tm_year+1900)*10000+(gm->tm_mon+1)*100+gm->tm_mday;
33 
34  for(j=0;j<6;j++)
35  number_found[j]=0;
36 
37  for(k=0;k<max_tstations;k++) {
38 
39  for(m=0;m<6;m++) {
40 
41  tdata[i].stn[k].tlevel1[m].data=-99;
42  tdata[i].stn[k].tlevel1[m].qual=-99;
43 
44  }
45 
46  }
47 
48 if(fr==NULL) {
49 
50  for(k=0;k<6;k++) {
51 
52  tdata[i].used[k]=0;
53  tdata[i].level[k]=0;
54 
55  }
56 
57  return(-1);
58 
59  }
60 
61  for(k=0;k<6;k++) {
62 
63  tdata[i].used[k]=1;
64  tdata[i].level[k]=1;
65 
66  }
67 
68 /* initialize structure */
69 
70  for(;;) {
71 
72  bad:
73  p=fgets(kbuf,100,fr);
74  if(p==NULL)
75  break;
76 
77  if(kbuf[0]==':')
78  continue;
79 
80  ier=sscanf(&kbuf[2],"%s %s %s",hb5,datbuf,parmbuf);
81  if(ier==0)
82  continue;
83 
84  p=strchr(parmbuf,'/');
85  if(p==NULL)
86  continue;
87 
88  if(*(p+6)=='X') {
89 
90  offset=7;
91  kread=1;
92  startk=4;
93  maxk=5;
94 
95  }
96 
97  else if(*(p+6)=='N') {
98 
99  offset=7;
100  kread=1;
101  startk=5;
102  maxk=6;
103 
104  }
105 
106  else {
107 
108  offset=0;
109  kread=3;
110  startk=0;
111  maxk=4;
112 
113 
114  }
115 
116  pc=*(p+5);
117 
118  for(j=0;j<max_tstations;j++) {
119 
120  if(strcmp(hb5,tstation[j].hb5)==0 &&
121  pc==tstation[j].parm[4]) {
122 
123  break;
124 
125  }
126 
127  }
128 
129  if(j==max_tstations) {
130 
131  continue;
132 
133  }
134 
135  q=kbuf;
136  for(k=0;k<kread;k++) {
137 
138  p=strchr(q,'/');
139  if(p==NULL)
140  break;
141 
142  q=p+1;
143 
144  }
145 
146  if(k!=kread)
147  continue; /* missing */
148 
149  for(k=startk;k<maxk;k++) {
150 
151  tdata[i].stn[j].tlevel1[k].qual=0;
152 
153  if((p=strchr(q,'/'))==NULL &&
154  (p=strchr(q,'\n'))==NULL)
155  goto bad;
156 
157  *p=0;
158 
159  strcpy(buf,q+offset);
160 
161  if((p=strchr(buf,'m'))!=NULL ||
162  (p=strchr(buf,'M'))!=NULL) {
163 
164  tdata[i].stn[j].tlevel1[k].data=-99;
165  tdata[i].stn[j].tlevel1[k].qual=-99;
166 
167  }
168 
169  else {
170 
171  p=buf;
172 
173  number_found[k]++;
174 
175 
176  tdata[i].stn[j].tlevel1[k].data=atoi(buf);
177 
178  r=p;
179  qual=8;
180 
181  while(*r != 0) {
182 
183  if(isalpha(*r) != 0) {
184 
185  if(*r=='S' || *r=='A')
186  qual=8;
187 
188  else if(*r=='F')
189  qual=1;
190 
191  else if(*r=='V')
192  qual=8;
193 
194  else if(*r=='E')
195  qual=5;
196 
197  tdata[i].stn[j].tlevel1[k].qual=qual;
198 
199 
200 
201  break;
202 
203  }
204 
205  else
206  r++;
207 
208  }
209 
210  }
211 
212  p=strchr(q,0);
213  q=p+1;
214 
215  }
216 
217  }
218 
219 
220 fclose(fr);
221 
222 for(j=0;j<6;j++) {
223 
224  if(number_found[j] == 0)
225  tdata[i].used[j]=0;
226 
227  }
228 
229 
230 return(1);
231 
232 }
struct station tstation[1000]
Definition: daily_qc.c:197
int max_tstations
Definition: daily_qc.c:46
char t
Definition: build_list.c:122
char type[5]
Definition: daily_qc.c:98
char qual[10]
Definition: display_data.c:29
fr
Definition: jnk.c:17
int read_t_a(char *fname, time_t tget, int i)
Definition: read_t_a.c:3
Definition: misc.h:397
Definition: misc.h:232
float lat
Definition: misc.h:239
float lon
Definition: misc.h:240
char parm[10]
Definition: misc.h:237
char hb5[10]
Definition: misc.h:235
time_t data_time
Definition: misc_new.h:447
int used[6]
Definition: misc_new.h:449
struct ttn stn[1000]
Definition: misc_new.h:452
int level[6]
Definition: misc_new.h:451
int ztime
Definition: misc_new.h:448
char qual
Definition: misc_new.h:401
short int data
Definition: misc_new.h:400
struct tlevel * tlevel1
Definition: misc_new.h:410