Mapper
ffg.c
Go to the documentation of this file.
1 #define _POSIX_SOURCE
2 #include "prototypes.h"
3 
4 Widget textw[21],top_level;
5 
6 int maxnumber=22;
7 
8 char *names[]={"Utah zone 1",
9  "Utah zone 2",
10  "Utah zone 3",
11  "Utah zone 4",
12  "Utah zone 5",
13  "Utah zone 6",
14  "Utah zone 7",
15  "Colorado zone 1",
16  "Colorado zone 2",
17  "New Mexico zone 1",
18  "New Mexico zone 2",
19  "New Mexico zone 3",
20  "Arizona zone 1",
21  "Arizona zone 2",
22  "Arizona zone 3",
23  "Arizona zone 4",
24  "Arizona zone 5",
25  "Arizona zone 6",
26  "Arizona zone 7",
27  "Nevada zone 4",
28  "Wyoming zone 3"};
29 
30 int pdi[]={1,2,3,4,5,6,7,21,6,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22};
31 
32 double ful[]={0.90,1.25,1.20,1.20,1.25,1.25,1.25,1.25,1.30,1.40,1.60,
33  1.75,1.80,1.80,1.35,1.70,2.25,2.25,1.50,2.25,2.25,1.25};
34 
35 double f1[]= {0.78,0.80,0.63,0.75,0.72,0.72,0.88,0.72,0.69,0.79,0.69,
36  0.69,0.72,0.72,0.89,0.77,0.78,0.78,0.73,0.67,0.78,0.72};
37 
38 double f6[]= {1.33,1.28,1.25,1.17,1.12,1.12,1.28,1.20,1.12,1.21,1.12,
39  1.06,1.11,1.17,1.30,1.12,1.12,1.12,1.33,1.16,1.16,1.12};
40 
41 double bf[]= {1.25,1.05,1.05,1.05,1.00,1.15,1.20,1.15,1.15,1.05,1.10,
42  1.25,1.10,1.10,1.15,1.25,1.00,1.00,1.25,1.25,1.25,1.25};
43 
44 char values[]={0xc8,0x48,0x03,0x30,0x02,0x5c,
45  0xc8,0x48,0x03,0x24,0x02,0x1b,
46  0xc8,0x40,0x03,0x4a,0x02,0x6d,
47  0xc8,0x48,0x03,0x45,0x02,0x34,
48  0xc8,0x48,0x03,0x61,0x02,0x6e,
49  0xc8,0x48,0x03,0x75,0x02,0x58,
50  0xc8,0x48,0x03,0x6a,0x02,0x2f,
51  0xc8,0x48,0x03,0x9a,0x02,0x40,
52  0xc8,0x40,0x03,0xb8,0x02,0x15,
53  0xc8,0x48,0x03,0x8d,0x01,0xf4,
54  0xc8,0x50,0x03,0x8f,0x01,0xc0,
55  0xc8,0x48,0x03,0x9e,0x01,0x8f,
56  0xc8,0x48,0x03,0x18,0x01,0xf1,
57  0xc8,0x40,0x03,0x58,0x01,0xea,
58  0xc8,0x48,0x03,0x30,0x01,0xd3,
59  0xc8,0x48,0x03,0x51,0x01,0xbb,
60  0xc8,0x48,0x03,0x0b,0x01,0xb7,
61  0xc8,0x48,0x03,0x37,0x01,0xae,
62  0xc8,0x40,0x03,0x53,0x01,0x93,
63  0xc8,0x48,0x03,0x03,0x02,0x0d,
64  0xc8,0x48,0x03,0x7c,0x02,0x86,
65  0xff};
66 
67 
68 String fallbacks[]={"*fontList: -adobe-courier-bold-r-*-180-*",NULL};
69 
70 void traverse();
71 void change_value();
72 void send_afos();
73 void quit_callback();
74 void kill_dialog();
75 
76 main(int argc,char *argv[])
77 
78 {
79 
80 Cardinal argcount;
81 Arg args[10];
82 int i,j,k,h,m,ier,mer,found,ival,no,ono;
83 FILE *fp;
84 char *p,fbuf[50000],abuf[100],mbuf[100],name[50],date[50],dbuf[100];
85 char *q;
86 DIR *dirp;
87 struct dirent *de;
88 Widget pbutton,rowcol,rowcol1,form,sw,rowcol2;
89 XmString t;
90 XtAppContext app;
91 double fval[50];
92 
93 dirp=opendir("/tmp/queue/afos/in");
94 
95 if(dirp==NULL) {
96  printf("could not open /tmp/queue/afos/in\n");
97  exit(1);
98  }
99 
100 found=0;
101 
102 for(;;) {
103 
104  de=readdir(dirp);
105 
106  if(de==NULL)
107  break;
108 
109  if(strncasecmp("NMCGPH6KA",de->d_name,9)==0) {
110 
111  strcpy(fbuf,de->d_name);
112 
113  p=strchr(fbuf,'.');
114 
115  if(p==NULL)
116  continue;
117 
118  q=strchr(p+1,'.');
119 
120  if(q==NULL)
121  continue;
122 
123  *q=0;
124 
125  found=1;
126 
127  no=atoi(p+1);
128 
129  if(ono == 12 && no == 1) {
130 
131  strcpy(name,de->d_name);
132  ono=no;
133  continue;
134 
135  }
136 
137  else if(no == 1 && ono == 12)
138  continue;
139 
140 
141  if(no > ono) {
142 
143  strcpy(name,de->d_name);
144  ono=no;
145 
146  }
147 
148  }
149 
150 
151  }
152 
153 if(found==1) {
154 
155  strcpy(fbuf,"/tmp/queue/afos/in/");
156  strcat(fbuf,name);
157 
158  fp=fopen(fbuf,"r");
159  if(fp==NULL) {
160 
161  printf("could not open %s\n",fbuf);
162  exit(1);
163 
164  }
165 
166  ier=fread(fbuf,1,50000,fp);
167 
168  for(i=0;i<500;i++) {
169 
170  mer=memcmp(&fbuf[i],"VALID",5);
171 
172  if(mer==0) {
173 
174  strncpy(date,&fbuf[i],16);
175  date[16]=0;
176 
177  break;
178 
179  }
180 
181  }
182 
183  for(m=0;m<25;m++) {
184 
185  h=m*6;
186 
187  if(values[h]==0xff)
188  break;
189 
190  k=0;
191 
192  for(i=0;i<ier;i++) {
193 
194  mer=memcmp(&fbuf[i],&values[h],6);
195 
196  if(mer==0) {
197 
198  for(j=i+8;j<i+12;j++) {
199 
200  if(fbuf[j]==0x0d)
201  break;
202 
203  else
204  abuf[k++]=fbuf[j];
205 
206  }
207  abuf[k]=0;
208  ival=atoi(abuf);
209  fval[m]=(float)ival/10;
210  break;
211 
212  }
213 
214  }
215 
216  }
217 
218  fclose(fp);
219 
220  fp=fopen("/usr/db/raw/ffg/data/ffg.out","w");
221 
222  fprintf(fp,"%s\n",date);
223 
224  for(i=0;i<maxnumber;i++)
225  fprintf(fp,"%f\n",fval[i]);
226 
227  }
228 
229 else {
230 
231  fp=fopen("/usr/db/raw/ffg/data/ffg.out","r");
232 
233  p=fgets(date,40,fp);
234 
235  for(i=0;i<maxnumber;i++){
236 
237  p=fgets(dbuf,80,fp);
238 
239  if(p==NULL)
240  break;
241 
242  ier=sscanf(dbuf,"%f",&fval[i]);
243 
244  }
245 
246  }
247 
248 fclose(fp);
249 
250 XtSetLanguageProc(NULL,NULL,NULL);
251 top_level = XtVaAppInitialize(&app,"main",NULL,0,&argc,argv,fallbacks,
252  XmNdeleteResponse,XmDO_NOTHING,NULL);
253 
254 argcount=0;
255 XtSetArg(args[argcount],XmNorientation,XmVERTICAL);argcount++;
256 rowcol=XmCreateRowColumn(top_level,"dummy",args,argcount);
257 
258 t=XmStringCreateLocalized("FFG (Version 1.0)");
259 argcount=0;
260 XtSetArg(args[argcount],XmNlabelString,t);argcount++;
261 pbutton=XmCreateLabel(rowcol,"Label",args,argcount);
262 XtManageChild(pbutton);
263 XmStringFree(t);
264 
265 pbutton=XmCreateSeparator(rowcol,"swp",NULL,0);
266 XtManageChild(pbutton);
267 
268 t=XmStringCreateLocalized(date);
269 argcount=0;
270 XtSetArg(args[argcount],XmNlabelString,t);argcount++;
271 pbutton=XmCreateLabel(rowcol,"Label",args,argcount);
272 XtManageChild(pbutton);
273 XmStringFree(t);
274 
275 argcount=0;
276 XtSetArg(args[argcount],XmNwidth,550);argcount++;
277 XtSetArg(args[argcount],XmNheight,300);argcount++;
278 XtSetArg(args[argcount],XmNscrollingPolicy,XmAUTOMATIC);argcount++;
279 
280 sw=XmCreateScrolledWindow(rowcol,"dummy",args,argcount);
281 
282 argcount=0;
283 XtSetArg(args[argcount],XmNpacking,XmPACK_COLUMN); argcount++;
284 XtSetArg(args[argcount],XmNnumColumns,22);argcount++;
285 XtSetArg(args[argcount],XmNorientation,XmHORIZONTAL);argcount++;
286 XtSetArg(args[argcount],XmNisAligned,True);argcount++;
287 XtSetArg(args[argcount],XmNentryAlignment,XmALIGNMENT_END);argcount++;
288 rowcol1=XmCreateRowColumn(sw,"Edit Stations",args,argcount);
289 
290 for(i=0;i<21;i++) {
291 
292  t=XmStringCreateLocalized(names[i]);
293  argcount=0;
294  XtSetArg(args[argcount],XmNlabelString,t);argcount++;
295  pbutton=XmCreateLabel(rowcol1,"Label",args,argcount);
296  XtManageChild(pbutton);
297  XmStringFree(t);
298 
299  argcount=0;
300  sprintf(dbuf,"%5.1f",fval[i]);
301  XtSetArg(args[argcount],XmNvalue,dbuf);argcount++;
302  textw[i]=XmCreateTextField(rowcol1,"Point QPF",args,argcount);
303  XtManageChild(textw[i]);
304  XtAddCallback(textw[i],XmNactivateCallback,traverse,NULL);
305  }
306 
307 pbutton=XmCreateSeparator(rowcol,"swp",NULL,0);
308 XtManageChild(pbutton);
309 
310 argcount=0;
311 form=XmCreateForm(rowcol,"Edit Stations",args,argcount);
312 
313 argcount=0;
314 XtSetArg(args[argcount],XmNleftAttachment,XmATTACH_POSITION);argcount++;
315 XtSetArg(args[argcount],XmNleftPosition,20);argcount++;
316 XtSetArg(args[argcount],XmNrightAttachment,XmATTACH_POSITION);argcount++;
317 XtSetArg(args[argcount],XmNrightPosition,40);argcount++;
318 pbutton=XmCreatePushButton(form,"Send",args,argcount);
319 XtAddCallback(pbutton,XmNactivateCallback,send_afos,NULL);
320 XtManageChild(pbutton);
321 
322 argcount=0;
323 XtSetArg(args[argcount],XmNleftAttachment,XmATTACH_POSITION);argcount++;
324 XtSetArg(args[argcount],XmNleftPosition,60);argcount++;
325 XtSetArg(args[argcount],XmNrightAttachment,XmATTACH_POSITION);argcount++;
326 XtSetArg(args[argcount],XmNrightPosition,80);argcount++;
327 pbutton=XmCreatePushButton(form,"Quit",args,argcount);
328 XtAddCallback(pbutton,XmNactivateCallback,quit_callback,NULL);
329 XtManageChild(pbutton);
330 
331 XtManageChild(form);
332 XtManageChild(rowcol1);
333 XtManageChild(sw);
334 XtManageChild(rowcol);
335 XtRealizeWidget(top_level);
336 
337 XtAppMainLoop(app);
338 
339 }
340 
341 void send_afos() {
342 
343 double ff1[50],ff3[50],ff6[50],fval[50];
344 int i,j,k,h,m,ier,mer,posit;
345 FILE *fp,*fw;
346 char *p,dbuf[100],abuf[100],mbuf[100],name[50],key[20],*w;
347 char buf1[50],buf2[50];
348 char datebuf[50],buf[50],*q,add[10],fname[50];
349 time_t tim;
350 struct tm *gm;
351 long pos;
352 char *cstr;
353 Cardinal argcount;
354 Arg args[10];
355 Widget dialog,textwi;
356 char text[1000];
357 
358 /* query widgets for data and save data in file */
359 
360 posit=0;
361 
362 for(i=0;i<21;i++) {
363 
364  argcount=0;
365  XtSetArg(args[argcount],XmNvalue,&cstr);argcount++;
366  XtGetValues(textw[i],args,argcount);
367 
368  fval[i]=atof(cstr);
369 
370  XtFree(cstr);
371 
372  }
373 
374 argcount=0;
375 XtSetArg(args[argcount],XmNwidth, 400);argcount++;
376 XtSetArg(args[argcount],XmNheight,400);argcount++;
377 XtSetArg(args[argcount],XmNautoUnmanage,FALSE);argcount++;
378 XtSetArg(args[argcount],XmNdialogStyle,
379  XmDIALOG_FULL_APPLICATION_MODAL);argcount++;
380 XtSetArg(args[argcount],XmNdeleteResponse,XmDO_NOTHING);
381  argcount++;
382 
383 dialog=XmCreateMessageDialog(top_level,"Values",args,argcount);
384 
385 XtUnmanageChild(XmMessageBoxGetChild(dialog,XmDIALOG_CANCEL_BUTTON));
386 XtUnmanageChild(XmMessageBoxGetChild(dialog,XmDIALOG_HELP_BUTTON));
387 
388 XtAddCallback(dialog,XmNokCallback,kill_dialog,NULL);
389 
390 text[0]=0;
391 
392 strcat(text,"The following products were\ncreated and sent to AFOS:\n\n");
393 posit=strlen(text);
394 
395 argcount=0;
396 XtSetArg(args[argcount],XmNrows,10);argcount++;
397 XtSetArg(args[argcount],XmNcolumns,20);argcount++;
398 XtSetArg(args[argcount],XmNeditable,False);argcount++;
399 XtSetArg(args[argcount],XmNeditMode,XmMULTI_LINE_EDIT);argcount++;
400 XtSetArg(args[argcount],XmNcursorPositionVisible,False);argcount++;
401 XtSetArg(args[argcount],XmNvalue,text);argcount++;
402 textwi=XmCreateScrolledText(dialog,"areas",args,argcount);
403 
404 XtManageChild(textwi);
405 XtManageChild(dialog);
406 
407 for(i=0;i<maxnumber;i++) {
408 
409  m=pdi[i]-1;
410  if(fval[m] >= -2.0)
411  ff3[i]=(0.0192*fval[m] + .9808) + .005;
412 
413  else if(fval[m] < -2.0 && fval[m] > -5.0)
414  ff3[i]=.93;
415 
416  else
417  ff3[i]=(-.02*fval[m] + .824) + .005;
418 
419  ff3[i]=ful[i]/ff3[i]*bf[i];
420 
421  ff1[i]=ff3[i]*f1[i];
422  ff6[i]=ff3[i]*f6[i];
423 
424  }
425 
426 tim=time(NULL);
427 
428 gm=localtime(&tim);
429 
430 strftime(dbuf,80,"%I%M %p %Z %B %d, %Y",gm);
431 
432 if(dbuf[0]=='0')
433  i=1;
434 
435 else
436  i=0;
437 
438 strcpy(datebuf,&dbuf[i]);
439 
440 fp=fopen("/usr/db/raw/ffg/data/ffg.in","r");
441 
442 if(fp==NULL) {
443 
444  printf("could not open /usr/db/raw/ffg/data/ffg.in\n");
445  exit(1);
446 
447  }
448 
449 for(;;) {
450 
451  p=fgets(dbuf,100,fp);
452 
453  if(p==NULL)
454  break;
455 
456 
457  p=strchr(dbuf,'\n');
458  if(p!=NULL)
459  *p=0;
460 
461  p=pars_line(dbuf,"key=",key);
462  if(p!=NULL) {
463 
464  /* new product */
465 
466  p=pars_line(dbuf,"name=",name);
467  p=pars_line(dbuf,"add=",add);
468 
469  strcpy(fname,"/usr/db/raw/ffg/data/");
470  strcat(fname,key);
471 
472  fw=fopen(fname,"w");
473 
474  if(fw==NULL) {
475 
476  printf("could not open %s\n",buf1);
477  exit(1);
478 
479  }
480 
481  sprintf(buf,"ZCZC %s %s\n",key,add);
482  fputs(buf,fw);
483 
484  sprintf(buf,"TTAA00 KSLR DDHHMM\n");
485  fputs(buf,fw);
486  fputs("Colorado Basin River Forcast Center\n",fw);
487  fputs("National Weather Service Salt Lake City, Utah\n",fw);
488  sprintf(mbuf,"\nFlash flood guidance issued %s\n",datebuf);
489  fputs(mbuf,fw);
490 
491  sprintf(mbuf,"\n.B SLR %02d%02d DH12/PPHCF/PPTCF/PPQCF\n",
492  gm->tm_mon+1,gm->tm_mday);
493  fputs(mbuf,fw);
494  sprintf(mbuf,"\n:%s\n",name);
495  fputs(mbuf,fw);
496 
497  fputs(": Average\n",fw);
498  fputs(":Forecast Rainfall in Inches\n",fw);
499  fputs(": Zone 1 hr 3 hr 6 hr\n",fw);
500  fputs(":-------- --------------------\n",fw);
501 
502  for(;;) {
503 
504  pos=ftell(fp);
505  p=fgets(dbuf,100,fp);
506 
507  if(p==NULL)
508  break;
509 
510  p=pars_line(dbuf,"key",mbuf);
511 
512  if(p!=NULL) {
513 
514  fseek(fp,pos,SEEK_SET);
515  break;
516 
517  }
518 
519  ier=sscanf(dbuf,"%s %s",buf1,buf2);
520 
521  k=atoi(buf1)-1;
522 
523  sprintf(mbuf,"%s %4.1f %4.1f %4.1f\n",
524  buf2,ff1[k],ff3[k],ff6[k]);
525 
526  fputs(mbuf,fw);
527 
528  }
529 
530  fputs(".END\n\n",fw);
531  fputs("Values are average inches of rainfall to begin flooding\n",fw);
532  fputs("\nFlash Flood Guidance is primarily dependent upon terrain and rainfall\n",fw);
533  fputs("intensity. Flash Flood Guidance for urban areas and steep mountainous\n",fw);
534  fputs("terrain may be less than indicated above.\n",fw);
535 
536  fputs("\nNNNN\n",fw);
537 
538  fclose(fw);
539  ier=to_afos(fname);
540 
541  if(ier==0)
542  w="sent";
543 
544  else
545  w="not sent";
546 
547  sprintf(mbuf,"%s %s to afos\n",key,w);
548  posit=posit+strlen(mbuf);
549  XmTextInsert(textwi,posit,mbuf);
550 
551  XmUpdateDisplay(top_level);
552 
553  }
554 
555  }
556 
557 fclose(fp);
558 
559 }
560 
562 
563 {
564 
565 raise(SIGKILL);
566 
567 }
568 
569 void traverse(Widget w,XtPointer data,XtPointer junk)
570 
571 {
572 
573 XmProcessTraversal(w,XmTRAVERSE_NEXT_TAB_GROUP);
574 
575 }
576 
577 void kill_dialog(Widget w,XtPointer data,XtPointer junk)
578 
579 {
580 
581 XtDestroyWidget(w);
582 
583 }
584 
char name[35][30]
Definition: borshef.c:10
static int i
char fbuf[100]
Definition: decode_HDP.c:2
#define FALSE
Definition: decode_HDP.c:9
Widget dialog
Definition: display_rec.c:5
Widget text
Definition: display_rec.c:5
void traverse()
void send_afos()
Definition: ffg.c:341
int maxnumber
Definition: ffg.c:6
double f6[]
Definition: ffg.c:38
int pdi[]
Definition: ffg.c:30
char values[]
Definition: ffg.c:44
Widget top_level
Definition: ffg.c:4
double ful[]
Definition: ffg.c:32
void change_value()
Widget textw[21]
Definition: ffg.c:4
double bf[]
Definition: ffg.c:41
String fallbacks[]
Definition: ffg.c:68
double f1[]
Definition: ffg.c:35
void quit_callback()
Definition: ffg.c:561
char * names[]
Definition: ffg.c:8
void kill_dialog()
main(int argc, char *argv[])
Definition: ffg.c:76
struct stat buf
Definition: is_file_closed.c:8
char * pars_line(char *buf, char *s, char *sbuf)
Definition: pars_line.c:3
int to_afos(char *fname)
Definition: to_afos.c:3
fclose(fp)
sprintf(fbuf,"/usr/mapper/nexrad/ngrid.%02d-%02d-%02d-%02d", year, month, day, hour)
printf("fbuf is %s\n", fbuf)
fp
Definition: make_NEXRAD.c:339
fprintf(fp,"%d %d %d %d 1\n", iminx, iminy, maxi, maxj)
int j
Definition: mapp2h.h:48
int k
Definition: mapp2h.h:48
XtAppContext app
Definition: mapper.c:199
int posit
Definition: mapper.c:93
Arg args[10]
char fname[100]
Definition: send_afos.c:6
struct dirent * de
Definition: shef_structs.h:266
DIR * dirp
Definition: shef_structs.h:265
tim()
Definition: tim.c:4