Mapper
display_data.c
Go to the documentation of this file.
1 #include "prototypes_new.h"
2 
3 extern struct stn_values *stn_values;
5 extern int max_width,max_height;
6 extern XFontStruct *info_font[10];
7 extern Font font[10];
8 extern int init_subdisplay;
9 extern Display *display;
10 extern Window bwindow[20],root_win;
11 extern struct save_rec save_rec[20];
12 extern char qual[10];
13 extern int display_method;
14 extern Widget bdrawing_area[10];
15 extern Widget draw_dialog[10];
16 extern Widget top_level;
17 extern Widget bmain_window;
18 extern unsigned long mmap[16];
19 extern GC gc1;
20 void options_draw();
21 void quit_draw();
24 extern struct stn_rec stn_rec;
25 
27 
28 void display_data(char *hb5,char *pc,int dmonth,int dday,int dyear,int dhour,
29  int ddays,char *fname)
30 
31 {
32 
33 int i;
34 time_t tim;
35 struct tm *gmtim;
36 Cardinal argcount;
37 Arg args[10];
38 struct stim btime;
39 struct stim etime;
40 
41 month=dmonth;
42 day=dday;
43 year=dyear;
44 hour=dhour;
45 days=ddays;
46 
47 if(init_subdisplay == 0) {
48 
49  stn_values=calloc(10000,sizeof(struct stn_values));
50 
51  for(i=0;i<10;i++) {
52 
53  draw_dialog[i]=0;
54  save_rec[i].inum=-1;
55  save_rec[i].volume=0;
56 
57 
58  }
59 
60  gc1= XCreateGC(display,root_win,0,0);
61 
62  init_subdisplay=1;
63 
64 }
65 
66 btime.year=year;
67 btime.month=month;
68 btime.day=day;
69 btime.hour=hour;
70 
72 
73 tim=tim-days*86400L;
74 gmtim=gmtime(&tim);
75 
76 etime.year=gmtim->tm_year+1900;
77 etime.month=gmtim->tm_mon+1;
78 etime.day=gmtim->tm_mday;
79 etime.hour=gmtim->tm_hour;
80 
81 get_new_values(etime,btime,hb5,pc,fname);
82 
83 }
84 
85 void get_new_values(struct stim etim,struct stim btim,char *hb5,
86  char *pc,char *fname)
87 
88 {
89 
90 struct MenuItem items[10];
91 int j,inum,i,ier,ierr,qflow,len,k;
92 char *text,buf[300],sbuf[150],hbuf[10];
93 char *spaces;
94 Cardinal argcount;
95 Dimension width,height;
96 Arg args[10];
97 Widget menu_bar,main_bar,jwidget;
98 XmString cancel,file_string,print_string;
100 double qstage;
101 char *p;
102 int num,intbuf[10];
103 int ok_num;
104 char quality;
105 Display *disp;
106 char fbuf[100];
107 FILE *fp;
108 int simrec;
109 int snowrec;
110 int jj;
111 
112 simrec=0;
113 snowrec=0;
114 
115 spaces=" ";
116 
117 file_string=XmStringCreateLocalized("file");
118 print_string=XmStringCreateLocalized("print");
119 cancel=XmStringCreateLocalized("quit");
120 
122 
123 for(j=0;j<10;j++){
124 
125  if(draw_dialog[j]==0)
126  break;
127 
128  }
129 
130  if(j==10) {
131 
132  berror(top_level,"No creation space");
133  return;
134 
135  }
136 
137 if(display_method==1) {
138 
139  disp=XtDisplay(top_level);
140 
141  argcount=0;
142  XtSetArg(args[argcount],XmNdeleteResponse,XmDO_NOTHING);argcount++;
143  draw_dialog[j]=XmCreateMessageDialog(top_level,"Time series",
144  args,argcount);
145 
146 
147  XtUnmanageChild(XmMessageBoxGetChild(draw_dialog[j],
148  XmDIALOG_OK_BUTTON));
149  XtUnmanageChild(XmMessageBoxGetChild(draw_dialog[j],
150  XmDIALOG_HELP_BUTTON));
151  XtUnmanageChild(XmMessageBoxGetChild(draw_dialog[j],
152  XmDIALOG_CANCEL_BUTTON));
153  XtUnmanageChild(XmMessageBoxGetChild(draw_dialog[j],
154  XmDIALOG_SEPARATOR));
155 
156  argcount=0;
157  XtSetArg(args[argcount],XmNwidth,bmax_width);argcount++;
158  XtSetArg(args[argcount],XmNheight,bmax_height);argcount++;
159  XtSetArg(args[argcount],XmNbackground,0);argcount++;
160  bmain_window=XmCreateMainWindow(draw_dialog[j],"Main",
161  args,argcount);
162 
163  XtManageChild(bmain_window);
164 
165  argcount=0;
166  XtSetArg(args[argcount],XmNbackground,mmap[1]);argcount++;
167  XtSetArg(args[argcount],XmNforeground,mmap[0]);argcount++;
168  menu_bar=XmCreateMenuBar(bmain_window,"Menubar",args,argcount);
169  XtManageChild(menu_bar);
170 
171  argcount=0;
172  XtSetArg(args[argcount],XmNwidth, bmax_width);argcount++;
173  XtSetArg(args[argcount],XmNheight,bmax_height);argcount++;
174  XtSetArg(args[argcount],XmNresizePolicy,XmRESIZE_ANY);argcount++;
175  XtSetArg(args[argcount],XmNbackground,0);argcount++;
176  bdrawing_area[j]=XmCreateDrawingArea(bmain_window,"bdrawing_area",
177  args,argcount);
178 
179  XtManageChild(bdrawing_area[j]);
180 
181 
182  sprintf(fbuf,"%s/scratch.%d",fname,j);
183 
184  unlink(fbuf);
185 
186  sprintf(sbuf,"get_data %s %s %d %d %d %d %d %s",
187  hb5,pc,month,day,year,hour,days,fbuf);
188 
189  printf("%s", sbuf);
190  fflush(stdout);
191  system(sbuf);
192 
193  fp=fopen(fbuf,"r");
194  inum=0;
195  ier=-1;
196 
197  if(fp!=NULL) {
198 
199  fread(&stn_rec,sizeof(struct stn_rec),1,fp);
200 
201  fread(&inum,sizeof(int),1,fp);
202 
203  for(k=0;k<inum;k++)
204  fread(&stn_values[k],sizeof(struct stn_values),1,fp);
205 
206  fread(&ier,sizeof(int),1,fp);
207  if(ier==1)
208  fread(&rate_table,sizeof(RatingTable),1,fp);
209 
210 
211  fclose(fp);
212 
213  }
214 
215 
216  /* need stn_rec array */
217  /* stn_values structure */
218  /* inum */
219  /* inum stn values*/
220  /* rate_table array*/
221 
222  if(ier!=1)
223  rate_table.AryMax=-1;
224 
225  save_rec[j].is_realized=-1;
226 
227  memcpy(&save_rec[j].stn_rec,&stn_rec,sizeof(struct stn_rec));
228  memcpy(&save_rec[j].parm,pc,10);
229  memcpy(&save_rec[j].btim,&btim,sizeof(struct stim));
230  memcpy(&save_rec[j].etim,&etim,sizeof(struct stim));
231  memcpy(&save_rec[j].stn_values,stn_values,
232  inum*sizeof(struct stn_values));
233 
234  memcpy(&save_rec[j].rate_table,&rate_table,sizeof(RatingTable));
235 
236  save_rec[j].inum=inum;
237 
238  save_rec[j].volume=0;
239 
240  if(save_rec[j].parm[2]=='M')
241  save_rec[j].volume=24*30;
242 
243  if(save_rec[j].parm[2]=='D')
244  save_rec[j].volume=24;
245 
246  else if(save_rec[j].parm[2]=='Q')
247  save_rec[j].volume=6;
248 
249  else if(save_rec[j].parm[2]=='H')
250  save_rec[j].volume=1;
251 
252  save_rec[j].pnum=0;
253 
254  if(pc[4]=='M') {
255 
256  unlink(fbuf);
257 
258  sprintf(sbuf,"get_data %s %s %d %d %d %d %d %s",
259  hb5,"SWIRMZZ",month,day,year,hour,days,fbuf);
260 
261  system(sbuf);
262 
263  fp=fopen(fbuf,"r");
264  inum=0;
265  ier=-1;
266 
267  if(fp!=NULL) {
268 
269  fread(&stn_rec,sizeof(struct stn_rec),1,fp);
270 
271  fread(&inum,sizeof(int),1,fp);
272 
273  for(k=0;k<inum;k++)
274  fread(&stn_values[k],sizeof(struct
275  stn_values),1,fp);
276 
277  fread(&ier,sizeof(int),1,fp);
278  if(ier==1)
279  fread(&rate_table,sizeof(RatingTable),1,fp);
280 
281 
282  fclose(fp);
283 
284  }
285 
286  memcpy(&save_rec[j].ptn_rec,&stn_rec,sizeof(struct stn_rec));
287  memcpy(&save_rec[j].pparm,"SWIRMZZ\0\0\0",10);
288 
289  memcpy(&save_rec[j].ptn_values,stn_values,
290  inum*sizeof(struct stn_values));
291 
292  save_rec[j].pnum=inum;
293 
294  if(inum > 0)
295  snowrec=1;
296 
297  save_rec[j].polume=0;
298 
299  if(save_rec[j].parm[2]=='M')
300  save_rec[j].polume=24*30;
301 
302  if(save_rec[j].parm[2]=='D')
303  save_rec[j].polume=24;
304 
305  else if(save_rec[j].parm[2]=='Q')
306  save_rec[j].polume=6;
307 
308  else if(save_rec[j].parm[2]=='H')
309  save_rec[j].polume=1;
310 
311  }
312 
313  else if(strncmp(pc,"HGIR",4)==0 ||
314  strncmp(pc,"QRIR",4)==0){
315 
316  unlink(fbuf);
317 
318  sprintf(sbuf,"get_data %s %s %d %d %d %d %d %s",
319  hb5,"QRIPAZZ",month,day,year,hour,days,fbuf);
320 
321  system(sbuf);
322 
323  fp=fopen(fbuf,"r");
324  inum=0;
325  ier=-1;
326 
327  if(fp!=NULL) {
328 
329  fread(&stn_rec,sizeof(struct stn_rec),1,fp);
330 
331  fread(&inum,sizeof(int),1,fp);
332 
333  for(k=0;k<inum;k++)
334  fread(&stn_values[k],sizeof(struct
335  stn_values),1,fp);
336 
337  fread(&ier,sizeof(int),1,fp);
338  if(ier==1)
339  fread(&rate_table,sizeof(RatingTable),1,fp);
340 
341 
342  fclose(fp);
343 
344  }
345 
346  memcpy(&save_rec[j].ptn_rec,&stn_rec,sizeof(struct stn_rec));
347  memcpy(&save_rec[j].pparm,"QRIPAZZ\0\0\0",10);
348 
349  memcpy(&save_rec[j].ptn_values,stn_values,
350  inum*sizeof(struct stn_values));
351 
352  save_rec[j].pnum=inum;
353 
354  if(inum > 0)
355  simrec=1;
356 
357  save_rec[j].polume=0;
358 
359  if(save_rec[j].parm[2]=='M')
360  save_rec[j].polume=24*30;
361 
362  if(save_rec[j].parm[2]=='D')
363  save_rec[j].polume=24;
364 
365  else if(save_rec[j].parm[2]=='Q')
366  save_rec[j].polume=6;
367 
368  else if(save_rec[j].parm[2]=='H')
369  save_rec[j].polume=1;
370 
371  }
372 
373  else if(strncmp(pc,"QII",3)==0){
374 
375  unlink(fbuf);
376 
377  sprintf(sbuf,"get_data %s %s %d %d %d %d %d %s",
378  hb5,"QIIPAZZ",month,day,year,hour,days,fbuf);
379 
380  system(sbuf);
381 
382  fp=fopen(fbuf,"r");
383  inum=0;
384  ier=-1;
385 
386  if(fp!=NULL) {
387 
388  fread(&stn_rec,sizeof(struct stn_rec),1,fp);
389 
390  fread(&inum,sizeof(int),1,fp);
391 
392  for(k=0;k<inum;k++)
393  fread(&stn_values[k],sizeof(struct
394  stn_values),1,fp);
395 
396  fread(&ier,sizeof(int),1,fp);
397  if(ier==1)
398  fread(&rate_table,sizeof(RatingTable),1,fp);
399 
400 
401  fclose(fp);
402 
403  }
404 
405  memcpy(&save_rec[j].ptn_rec,&stn_rec,sizeof(struct stn_rec));
406  memcpy(&save_rec[j].pparm,"QIIPAZZ\0\0\0",10);
407 
408  memcpy(&save_rec[j].ptn_values,stn_values,
409  inum*sizeof(struct stn_values));
410 
411  save_rec[j].pnum=inum;
412 
413  if(inum > 0)
414  simrec=1;
415 
416  save_rec[j].polume=0;
417 
418  if(save_rec[j].parm[2]=='M')
419  save_rec[j].polume=24*30;
420 
421  if(save_rec[j].parm[2]=='D')
422  save_rec[j].polume=24;
423 
424  else if(save_rec[j].parm[2]=='Q')
425  save_rec[j].polume=6;
426 
427  else if(save_rec[j].parm[2]=='H')
428  save_rec[j].polume=1;
429 
430  }
431 
432  XmMainWindowSetAreas(bmain_window,menu_bar,NULL,NULL,NULL,
433  bdrawing_area[j]);
434 
435  items[0].label="Quit";
436  items[0].callback=quit_draw;
437  items[0].callback_data=(XtPointer)j;
438  items[1].label=NULL;
439 
440  main_bar=BuildPulldownPushMenu(menu_bar,"File",'M',items);
441  jwidget=AttachToCascade(menu_bar,"File",main_bar);
442 
443  jj=0;
444 
445  if(rate_table.AryMax > 0) {
446 
447  items[jj].label="Linear stage";
448  items[jj].callback=options_draw;
449  items[jj++].callback_data=(XtPointer)(0+j*100);
450  items[jj].label="Linear flow";
451  items[jj].callback=options_draw;
452  items[jj++].callback_data=(XtPointer)(1+j*100);
453 
454  }
455 
456  if(rate_table.wrn >= 0 || rate_table.fld >= 0) {
457 
458  items[jj].label="Scale to data";
459  items[jj].callback=options_draw;
460  items[jj++].callback_data=(XtPointer)(2+j*100);
461  items[jj].label="Scale to flood";
462  items[jj].callback=options_draw;
463  items[jj++].callback_data=(XtPointer)(3+j*100);
464 
465  }
466 
467  if(simrec==1) {
468 
469  items[jj].label="Simulated flow off";
470  items[jj].callback=options_draw;
471  items[jj++].callback_data=(XtPointer)(4+j*100);
472 
473  items[jj].label="Simulated flow on";
474  items[jj].callback=options_draw;
475  items[jj++].callback_data=(XtPointer)(5+j*100);
476 
477  }
478 
479  if(snowrec==1) {
480 
481  items[jj].label="Snow plot off";
482  items[jj].callback=options_draw;
483  items[jj++].callback_data=(XtPointer)(6+j*100);
484 
485  items[jj].label="Snow plot on";
486  items[jj].callback=options_draw;
487  items[jj++].callback_data=(XtPointer)(7+j*100);
488 
489  }
490 
491  items[jj].label=NULL;
492 
493  main_bar=BuildPulldownPushMenu(menu_bar,"Options",'M',items);
494  jwidget=AttachToCascade(menu_bar,"Options",main_bar);
495 
496  XtManageChild(draw_dialog[j]);
497 
498  bwindow[j]=XtWindow(bdrawing_area[j]);
499 
500  XmUpdateDisplay(bdrawing_area[j]);
501 
502 
503 
504  XSetFunction(display,gc1,GXcopy);
505  XSetForeground(display,gc1,mmap[0]);
506  XSetBackground(display,gc1,mmap[0]);
507  XFillRectangle(display,bwindow[j],gc1,0,0,
509 
510  XtSetArg(args[0],XtNwidth,&width);
511  XtSetArg(args[1],XtNheight,&height);
512  XtGetValues(bdrawing_area[j],args,2);
513 
514 
515  draw_area(j,j,0,0,width,height);
516 
517 
518  XmStringFree(file_string);
519  XmStringFree(print_string);
520  XmStringFree(cancel);
521 
522  XtAddCallback(bdrawing_area[j],XmNexposeCallback,bhandle_expose,
523  (XtPointer)j);
524 
525  XtAddCallback(bdrawing_area[j],XmNresizeCallback,bhandle_expose,
526  (XtPointer)j);
527 
528  return;
529 
530  }
531 
532 }
533 
534 
535 void draw_area(int k,int m,int xs,int ys,int xz,int yz)
536 
537 {
538 
539 int xparm1,yparm1,xparm2,yparm2;
540 int width,height;
541 struct tm tm;
542 time_t lbtim,letim,stim,otim;
543 char abuf[100],tbuf[100];
544 int xmax,ymax,xmin,ymin,maxtimes,maxvalues,yheight;
545 struct max_min max_min;
546 struct max_min max_min2;
547 
548 int deltat,i,text_width,j,h,qflag,ier;
549 float deltav,fminv;
550 float fxvalue,fyvalue,svalue,dxvalue;
551 int maxv,minv,smaxv,sminv,dvalue;
552 int xvalue,oday,yvalue,xvalue1,yvalue1,totlin,totdays,hour,ierr,flow,ilinear;
553 struct tm *gm;
554 char buf[200],ubuf[50],xbuf[50];
555 int inum,merr,ybegin,len;
556 XRectangle rect[1];
557 double stage,wrn,fld,abs1,abs2;
558 struct stn_values values[10000];
559 struct stn_values qalues[10000];
560 int qnum;
561 int aflag;
562 int htflag;
563 int line_width,line_style,cap_style,join_style,lines;
564 int totyears;
565 char oqual;
566 char pe2;
567 int oxvalue;
568 
569 ilinear=linear;
570 
571 pe2='G';
572 
573 if(save_rec[k].parm[1]=='P')
574  pe2='P';
575 
576 inum=save_rec[k].inum;
577 
578 memcpy(&values,&save_rec[k].stn_values,
579  inum*sizeof(struct stn_values));
580 
581 qnum=save_rec[k].pnum;
582 
583 memcpy(&qalues,&save_rec[k].ptn_values,
584  qnum*sizeof(struct stn_values));
585 
586 XSetFont(display,gc1,font[1]);
587 yheight=info_font[1]->ascent;
588 
589 rect[0].x=xs;
590 rect[0].y=ys;
591 rect[0].width=xz;
592 rect[0].height=yz;
593 
594 XSetFunction(display,gc1,GXcopy);
595 XSetForeground(display,gc1,mmap[0]);
596 XSetBackground(display,gc1,mmap[0]);
597 XSetClipRectangles(display,gc1,0,0,rect,1,Unsorted);
598 
599 width=xs+xz;
600 height=ys+yz;
601 
602 xparm1=75;
603 
604 if(qnum==0) {
605 
606  yparm1=yheight*5;
607  yparm2=yheight*3;
608  aflag=0;
609 
610 }
611 
612 else {
613 
614  yparm1=yheight*10;
615  yparm2=yheight*6;
616  aflag=4;
617 
618 }
619 
620 xparm2=75;
621 
622 /* set box size */
623 
624 XSetForeground(display,gc1,mmap[3]);
625 
626 XDrawLine(display,bwindow[m],gc1,xs+xparm1,height-yparm2,width-xparm1,
627  height-yparm2);
628 
629 XDrawLine(display,bwindow[m],gc1,xs+xparm1,ys+yparm1,width-xparm1,
630  ys+yparm1);
631 
632 XDrawLine(display,bwindow[m],gc1,xs+xparm1,ys+yparm1,xs+xparm1,
633  height-yparm2);
634 XDrawLine(display,bwindow[m],gc1,width-xparm1,ys+yparm1,width-xparm1,
635  height-yparm2);
636 
637 xmin=xs+xparm1+10;
638 xmax=width-xparm1-10;
639 ymin=ys+yparm1+10;
640 ymax=height-yparm2-10;
641 
642 XSetForeground(display,gc1,mmap[7]);
643 
644 if(inum==-1) {
645 
646  sprintf(buf,"%s %s not found in database",
648 
649  XDrawString(display,bwindow[m],gc1,(xmax+xmin-200)/2,
650  (ymax+ymin)/2,buf,strlen(buf));
651 
652  return;
653 
654  }
655 
656 /* draw hb5,name,etc text */
657 
658 XSetForeground(display,gc1,mmap[7]);
659 
661 
662 XDrawString(display,bwindow[m],gc1,xs+xparm1,ys+yparm1-yheight*(4+aflag),
663  buf,strlen(buf));
664 
665 strcpy(tbuf,save_rec[k].parm);
666 
667 get_acronym(tbuf,abuf);
668 sprintf(buf,"%s %s %s",save_rec[k].stn_rec.id,tbuf,abuf);
669 
670 XDrawString(display,bwindow[m],gc1,xs+xparm1,ys+yparm1-yheight*(3+aflag),
671  buf,strlen(buf));
672 
673 if(inum==0) {
674 
675  strcpy(buf,"NO DATA");
676 
677  XDrawString(display,bwindow[m],gc1,(xmax+xmin)/2,(ymax+ymin)/2,
678  buf,strlen(buf));
679 
680  save_rec[k].is_realized=1;
681  return;
682 
683  }
684 
685 
686 if(qnum != 0) {
687 
688 XSetForeground(display,gc1,mmap[5]);
689 
691 
692 XDrawString(display,bwindow[m],gc1,xs+xparm1,ys+yparm1-yheight*4,
693  buf,strlen(buf));
694 
695 strcpy(tbuf,save_rec[k].pparm);
696 
697 get_acronym(tbuf,abuf);
698 sprintf(buf,"%s %s %s",save_rec[k].ptn_rec.id,tbuf,abuf);
699 
700 XDrawString(display,bwindow[m],gc1,xs+xparm1,ys+yparm1-yheight*3,
701  buf,strlen(buf));
702 
703  }
704 tm.tm_sec=0;
705 tm.tm_min=0;
706 tm.tm_hour=save_rec[k].btim.hour;
707 tm.tm_mday=save_rec[k].btim.day;
708 tm.tm_mon=save_rec[k].btim.month;
709 tm.tm_year=save_rec[k].btim.year;
710 
711 lbtim=ouptime(tm.tm_year,tm.tm_mon,tm.tm_mday,tm.tm_hour,tm.tm_min,0);
712 
713 tm.tm_sec=0;
714 tm.tm_min=0;
715 tm.tm_hour=save_rec[k].etim.hour;
716 tm.tm_mday=save_rec[k].etim.day;
717 tm.tm_mon=save_rec[k].etim.month;
718 tm.tm_year=save_rec[k].etim.year;
719 
720 letim=ouptime(tm.tm_year,tm.tm_mon,tm.tm_mday,tm.tm_hour,tm.tm_min,0);
721 
722 /* set up time coordinates */
723 
724 if(save_rec[k].parm[2]=='M') {
725 
726  totlin=(lbtim-letim)/(24L*3600L)+1;
727  deltat=24;
728  totyears=(lbtim-letim)/(24L*3600L*365L)+1;
729  hour=0;
730 
731  }
732 
733 else {
734 
735  hour=0;
736 /*
737  if(tm.tm_hour > 0 && tm.tm_hour <=6)
738  hour=6-tm.tm_hour;
739 
740  else if(tm.tm_hour > 6 && tm.tm_hour <=12)
741  hour=12-tm.tm_hour;
742 
743  else if(tm.tm_hour > 12 && tm.tm_hour <=18)
744  hour=18-tm.tm_hour;
745 
746  else if(tm.tm_hour > 18)
747  hour=24-tm.tm_hour;
748 */
749 
750  hour=24-tm.tm_hour;
751 
752  deltat=get_delta_time(lbtim,letim);
753 
754  htflag=0;
755 
756  if(deltat>=24)
757  htflag=1;
758 
759  maxtimes=(lbtim-letim)/(deltat*3600L);
760 
761  totdays=(lbtim-letim)/(24L*3600L)+1;
762 
763  totlin=totdays*24/deltat+4;
764 
765 
766  }
767 
768 oday=-1;
769 
770 XSetForeground(display,gc1,mmap[2]);
771 
772 for(i=0;i<=totlin;i++) {
773 
774  stim=letim+((i-4)*deltat*3600L) + hour*3600L;
775 
776  fxvalue=xmin+(float)(xmax-xmin)/(float)(letim-lbtim)*
777  (float)(letim-stim);
778 
779  xvalue=fxvalue;
780 
781  if(xvalue > width-xparm1)
782  break;
783 
784  if(xvalue < xs+xparm1)
785  continue;
786 
787  gm=gmtime(&stim);
788 
789  if(save_rec[k].parm[2]=='M'){
790 
791  if(gm->tm_mday==1 && gm->tm_mon==0) {
792 
793  XDrawLine(display,bwindow[m],gc1,xvalue,ys+yparm1,
794  xvalue,height-yparm2);
795 
796  if(totyears < 5)
797  sprintf(buf,"%d/%d",gm->tm_mon+1,gm->tm_year);
798 
799  else
800  sprintf(buf,"%d",gm->tm_year);
801 
802  text_width=XTextWidth(info_font[1],buf,strlen(buf));
803  XDrawString(display,bwindow[m],gc1,xvalue-text_width/2,
804  height-yparm2+yheight*2,buf,strlen(buf));
805 
806 
807  }
808 
809  else if(gm->tm_mday==1 && totyears < 2) {
810 
811  sprintf(buf,"%d",gm->tm_mon+1);
812  text_width=XTextWidth(info_font[1],buf,strlen(buf));
813  XDrawString(display,bwindow[m],gc1,xvalue-text_width/2,
814  height-yparm2+yheight*2,buf,strlen(buf));
815 
816 
817  }
818 
819 
820  continue;
821 
822 
823  }
824 
825  XDrawLine(display,bwindow[m],gc1,xvalue,ys+yparm1,
826  xvalue,height-yparm2);
827 
828  if(oday != gm->tm_mday) {
829 
830  if(gm->tm_hour==0 || htflag==1) {
831 
832  sprintf(buf,"%d/%d",gm->tm_mon+1,gm->tm_mday);
833  text_width=XTextWidth(info_font[1],buf,strlen(buf));
834  XDrawString(display,bwindow[m],gc1,xvalue-text_width/2,
835  height-yparm2+yheight*2,buf,strlen(buf));
836 
837  oday=gm->tm_mday;
838 
839  }
840 
841  }
842 
843  h=gm->tm_hour;
844 
845  qflag=0;
846 
847  if(deltat==1) {
848 
849  if(h==0 || h==2 || h==4 || h==6 || h==8 ||
850  h==10 || h==12 || h==14 || h==16 ||
851  h==18 || h==20 || h==22)
852  qflag=1;
853 
854  }
855 
856  else if(deltat==3 && totdays <= 2) {
857 
858 
859  if(h==0 || h==3 || h==6 || h==9 || h==12 ||
860  h==15 || h==18 || h==21)
861  qflag=1;
862 
863  }
864 
865  else if(deltat==3) {
866 
867  if(h==0 || h==6 || h==12 || h==18)
868  qflag=1;
869 
870  }
871 
872  else if(deltat==6) {
873 
874  if(h==0 || h==12)
875  qflag=1;
876 
877  }
878 
879  else if(deltat==24) {
880 
881  if(h==12)
882  qflag=1;
883 
884  }
885 
886  if(qflag==0)
887  continue;
888 
889  sprintf(buf,"%d",gm->tm_hour);
890  text_width=XTextWidth(info_font[1],buf,strlen(buf));
891  XDrawString(display,bwindow[m],gc1,xvalue-text_width/2,
892  height-yparm2+yheight,buf,strlen(buf));
893 
894  }
895 
896 /* get maxmin values */
897 
898 max_min=get_max_min(values,qalues,inum,qnum);
899 
900 /*
901 max_min2=get_max_min(qalues,qnum);
902 
903 if(max_min2.max > max_min.max && qnum > 0) {
904 
905  maxv=max_min2.max + 1;
906 
907  if(maxv-max_min2.max < .4)
908  maxv++;
909 
910  }
911 
912 
913 
914 else {
915 */
916  maxv=max_min.max + 1;
917 
918  if(maxv-max_min.max < .4)
919  maxv++;
920 
921 /* }
922 
923 if(max_min2.min < max_min.min && qnum > 0) {
924 
925  minv=max_min2.min - 1;
926 
927  if(minv-max_min2.min > .4)
928  minv--;
929 
930  }
931 
932 else {
933 */
934  minv=max_min.min - 1;
935 
936  if(minv-max_min.min > .4)
937  minv--;
938 
939  /* }
940 */
941 
942 if(save_rec[k].volume!=0)
943  minv=0;
944 
945 if(scale==1 && save_rec[k].rate_table.AryMax >= 0) {
946 
947  fminv=GetStage(save_rec[k].stn_rec.id,'H',
948  pe2,values[0].zdate,0,
949  &ierr);
950 
951  if(ierr >= 0 && ierr <= 2)
952  minv=fminv;
953 
954 
955  else
956  minv=save_rec[k].rate_table.RatStg[0];
957 
958 
959  }
960 
961 if(scale==1 && save_rec[k].rate_table.AryMax >= 0) {
962 
963  if(save_rec[k].rate_table.fld > 0 &&
965  maxv= save_rec[k].rate_table.fld + 2;
966 
967  else if(save_rec[k].rate_table.wrn > 0 &&
969  maxv= save_rec[k].rate_table.wrn + 2;
970 
971  }
972 
973 if(ilinear==1 && save_rec[k].rate_table.AryMax >= 0) {
974 
975  sminv=minv;
976  smaxv=maxv;
977 
978  if(minv < 0)
979  minv=0;
980 
981  minv=GetFlow(save_rec[k].stn_rec.id,'H',pe2,
982  values[0].zdate,(double)minv,
983  &ierr);
984 
985  maxv=GetFlow(save_rec[k].stn_rec.id,'H',pe2,
986  values[0].zdate,(double)maxv,
987  &merr);
988 
989  if(ierr == 3 || merr == 3) {
990 
991  ilinear=0;
992  minv=sminv;
993  maxv=smaxv;
994 
995  }
996 
997  }
998 
999 
1000 deltav=get_delta_valu(maxv-minv);
1001 maxvalues=(maxv-minv)/(deltav);
1002 
1003 lines=0;
1004 
1005 for(i=0;i<=maxvalues+2;i++) {
1006 
1007  svalue=(float)minv+(i*deltav);
1008  fyvalue=ymax-(float)(ymin-ymax)/(float)(minv-maxv)*
1009  (float)(svalue-minv);
1010 
1011  yvalue=fyvalue;
1012  if(yvalue < ys+yparm1 || yvalue > height-yparm2)
1013  continue;
1014 
1015  XSetForeground(display,gc1,mmap[2]);
1016 
1017  if(lines==0 && save_rec[k].volume != 0)
1018  XSetForeground(display,gc1,mmap[9]);
1019 
1020  else
1021  XSetForeground(display,gc1,mmap[2]);
1022  lines++;
1023 
1024  XDrawLine(display,bwindow[m],gc1,xs+xparm1,yvalue,
1025  width-xparm1,yvalue);
1026 
1027  if(ilinear==0 || (ilinear==1 &&
1028  save_rec[k].rate_table.AryMax < 0)) {
1029 
1030  XSetForeground(display,gc1,mmap[2]);
1031  sprintf(buf,"%6.1f",svalue);
1032 
1033  xvalue=width-xparm1+2;
1034 
1035  }
1036 
1037  else {
1038 
1039  flow=(int)svalue;
1040 
1041  sprintf(buf,"%d",flow);
1042 
1043  text_width=XTextWidth(info_font[1],buf,strlen(buf));
1044 
1045  xvalue=xs+xparm1-text_width;
1046 
1047  XSetForeground(display,gc1,mmap[2]);
1048 
1049  }
1050 
1051  for(j=0;j<6;j++)
1052  if(buf[j] != ' ')
1053  break;
1054 
1055  XDrawString(display,bwindow[m],gc1,xvalue,
1056  yvalue+yheight/2,&buf[j],strlen(&buf[j]));
1057 
1058  if(save_rec[k].rate_table.AryMax < 0)
1059  continue;
1060 
1061  if(ilinear==0 || (ilinear==1 &&
1062  save_rec[k].rate_table.AryMax < 0)) {
1063 
1064  flow=GetFlow(save_rec[k].stn_rec.id,'H',pe2,
1065  values[0].zdate,(double)svalue,
1066  &ierr);
1067 
1068  }
1069 
1070  else {
1071 
1072  stage=GetStage(save_rec[k].stn_rec.id,'H',
1073  pe2,values[0].zdate,
1074  (int)svalue,&ierr);
1075 
1076  svalue=stage;
1077 
1078 
1079  }
1080 
1081  if(ilinear==1 && save_rec[k].rate_table.AryMax >= 0) {
1082 
1083  XSetForeground(display,gc1,mmap[2]);
1084  sprintf(buf,"%6.1f",svalue);
1085  xvalue=width-xparm1+2;
1086 
1087  }
1088 
1089  else {
1090 
1091  sprintf(buf,"%d",flow);
1092  text_width=XTextWidth(info_font[1],buf,strlen(buf));
1093  xvalue=xs+xparm1-text_width;
1094 
1095  XSetForeground(display,gc1,mmap[2]);
1096 
1097  }
1098 
1099  for(j=0;j<6;j++)
1100  if(buf[j] != ' ')
1101  break;
1102 
1103  XDrawString(display,bwindow[m],gc1,xvalue,
1104  yvalue+yheight/2,&buf[j],strlen(&buf[j]));
1105 
1106 }
1107 
1108 line_width=1;
1109 line_style=LineOnOffDash;
1110 cap_style=CapRound;
1111 join_style=JoinRound;
1112 
1113 XSetLineAttributes(display,gc1,line_width,line_style,
1114  cap_style,join_style);
1115 
1116 if(save_rec[k].rate_table.AryMax >= 0){
1117 
1118  if(ilinear==0)
1119  fld=save_rec[k].rate_table.HMax;
1120 
1121  else {
1122 
1123  flow=GetFlow(save_rec[k].stn_rec.id,'H',pe2,
1124  values[0].zdate,
1125  (double)save_rec[k].rate_table.HMax,
1126  &ierr);
1127 
1128  fld=(double)flow;
1129 
1130  }
1131 
1132  fyvalue=ymax-(float)(ymin-ymax)/(float)(minv-maxv)*
1133  (float)(fld-minv);
1134 
1135  yvalue=fyvalue;
1136 
1137  XSetForeground(display,gc1,mmap[8]);
1138 
1139  if(yvalue > ys+yparm1 &&
1140  yvalue < height-yparm2)
1141  XDrawLine(display,bwindow[m],gc1,xs+xparm1,yvalue,
1142  width-xparm1,yvalue);
1143 
1144 
1145  }
1146 
1147 if(save_rec[k].rate_table.AryMax >= 0 &&
1148  save_rec[k].rate_table.wrn > 0 ) {
1149 
1150  if(ilinear==0)
1151  wrn=save_rec[k].rate_table.wrn;
1152 
1153  else {
1154 
1155  flow=GetFlow(save_rec[k].stn_rec.id,'H',pe2,
1156  values[0].zdate,
1157  (double)save_rec[k].rate_table.wrn,
1158  &ierr);
1159 
1160  wrn=(double)flow;
1161 
1162  }
1163 
1164  fyvalue=ymax-(float)(ymin-ymax)/(float)(minv-maxv)*
1165  (float)(wrn-minv);
1166 
1167  yvalue=fyvalue;
1168 
1169  XSetForeground(display,gc1,mmap[5]);
1170 
1171 
1172  line_width=1;
1173  line_style=LineOnOffDash;
1174  cap_style=CapRound;
1175  join_style=JoinRound;
1176 
1177  XSetLineAttributes(display,gc1,line_width,line_style,
1178  cap_style,join_style);
1179 
1180  if(yvalue > ys+yparm1 &&
1181  yvalue < height-yparm2)
1182  XDrawLine(display,bwindow[m],gc1,xs+xparm1,yvalue,
1183  width-xparm1,yvalue);
1184 
1185 
1186  }
1187 
1188 if(save_rec[k].rate_table.AryMax >= 0 &&
1189  save_rec[k].rate_table.fld > 0 ) {
1190 
1191  if(ilinear==0)
1192  fld=save_rec[k].rate_table.fld;
1193 
1194  else {
1195 
1196  flow=GetFlow(save_rec[k].stn_rec.id,'H',pe2,
1197  values[0].zdate,
1198  (double)save_rec[k].rate_table.fld,
1199  &ierr);
1200 
1201  fld=(double)flow;
1202 
1203  }
1204 
1205  fyvalue=ymax-(float)(ymin-ymax)/(float)(minv-maxv)*
1206  (float)(fld-minv);
1207 
1208  yvalue=fyvalue;
1209 
1210  XSetForeground(display,gc1,mmap[4]);
1211 
1212  if(yvalue > ys+yparm1 &&
1213  yvalue < height-yparm2)
1214  XDrawLine(display,bwindow[m],gc1,xs+xparm1,yvalue,
1215  width-xparm1,yvalue);
1216 
1217 
1218  }
1219 
1220 line_width=1;
1221 line_style=LineSolid;
1222 cap_style=CapRound;
1223 join_style=JoinRound;
1224 
1225 XSetLineAttributes(display,gc1,line_width,line_style,
1226  cap_style,join_style);
1227 
1228 XSetForeground(display,gc1,mmap[3]);
1229 
1230 if(save_rec[k].rate_table.AryMax >= 0) {
1231 
1232  xvalue=xs+10;
1233 
1234 
1235  get_units("Q",ubuf);
1236 
1237  len=strlen(ubuf);
1238 
1239  ybegin=ymin+((ymax-ymin) - len*yheight)/2;
1240 
1241  if(ybegin < ymin)
1242  ybegin=ymin;
1243 
1244  for(i=0;i<len;i++) {
1245 
1246  xbuf[0]=ubuf[i];
1247  xbuf[1]=0;
1248 
1249  yvalue=ybegin+i*yheight;
1250  XDrawString(display,bwindow[m],gc1,xvalue,
1251  yvalue,xbuf,strlen(xbuf));
1252 
1253 
1254  }
1255 
1256 }
1257 
1258 
1259 xvalue=width-20;
1260 
1261 if(save_rec[k].rate_table.AryMax > 0 &&
1262  (save_rec[k].parm[0]=='Q' && save_rec[k].parm[2]=='I') ||
1263  (save_rec[k].parm[0]=='L' && save_rec[k].parm[2]=='I') )
1264  get_units("H",ubuf);
1265 
1266 else
1267  get_units(save_rec[k].parm,ubuf);
1268 
1269 len=strlen(ubuf);
1270 
1271 ybegin=ymin+((ymax-ymin) - len*yheight)/2;
1272 
1273 if(ybegin < ymin)
1274  ybegin=ymin;
1275 
1276 for(i=0;i<len;i++) {
1277 
1278  xbuf[0]=ubuf[i];
1279  xbuf[1]=0;
1280 
1281  yvalue=ybegin+i*yheight;
1282  XDrawString(display,bwindow[m],gc1,xvalue,
1283  yvalue,xbuf,strlen(xbuf));
1284 
1285 
1286  }
1287 
1288 XSetForeground(display,gc1,mmap[7]);
1289 oxvalue=-1;
1290 
1291 if(save_rec[k].volume!= 0) {
1292 
1293  for(i=0;i<inum;i++) {
1294 
1295  tm.tm_year=values[i].zdate/10000-1900;
1296  tm.tm_mon=(values[i].zdate-(tm.tm_year+1900)*10000)/100;
1297  tm.tm_mday=values[i].zdate-(tm.tm_year+1900)*10000-tm.tm_mon*100;
1298  tm.tm_hour=values[i].ztime/10000;
1299  tm.tm_min=(values[i].ztime-tm.tm_hour*10000)/100;
1300 
1301  tm.tm_mon=tm.tm_mon;
1302  stim=ouptime(tm.tm_year+1900,tm.tm_mon,tm.tm_mday,
1303  tm.tm_hour,tm.tm_min,0);
1304 
1305  fxvalue=xmin+(float)(xmax-xmin)/(float)(letim-lbtim)*
1306  (float)(letim-stim);
1307 
1308  svalue=values[i].value;
1309 
1310  fyvalue=ymax-(float)(ymin-ymax)/(float)(minv-maxv)*
1311  (float)(svalue-minv);
1312 
1313  yvalue=fyvalue+.5;
1314  xvalue=fxvalue+.5;
1315  oqual=values[i].qual;
1316 
1317  dxvalue=-(float)(xmax-xmin)/(float)(letim-lbtim)*
1318  (float)(3600*save_rec[k].volume);
1319 
1320  dvalue=dxvalue+.5;
1321 
1322  if(dvalue < 2)
1323  dvalue=2;
1324 
1325  if(ymax - yvalue == 0 && i > 0) {
1326 
1327 
1328  if(oqual == 'S' || oqual == 'V' ||
1329  oqual == 'A' || oqual == 'B')
1330  XSetForeground(display,gc1,mmap[7]);
1331 
1332  else if(oqual == 'F' || oqual == 'X')
1333  XSetForeground(display,gc1,mmap[9]);
1334 
1335  else if(oqual == 'D' || oqual == 'E' || oqual=='O')
1336  XSetForeground(display,gc1,mmap[10]);
1337 
1338  else if(oqual == 'Q' || oqual == 'C' )
1339  XSetForeground(display,gc1,mmap[11]);
1340 
1341  else
1342  XSetForeground(display,gc1,mmap[3]);
1343 
1344  XDrawLine(display,bwindow[m],gc1,xvalue-dvalue,ymax,
1345  xvalue,ymax);
1346 
1347  }
1348 
1349  else {
1350 
1351  if(ymax-yvalue==0)
1352  XSetForeground(display,gc1,mmap[3]);
1353 
1354  else if(oqual == 'S' || oqual == 'V' ||
1355  oqual == 'A' || oqual == 'B')
1356  XSetForeground(display,gc1,mmap[7]);
1357 
1358  else if(oqual == 'F' || oqual == 'X')
1359  XSetForeground(display,gc1,mmap[9]);
1360 
1361  else if(oqual == 'D' || oqual == 'E' || oqual=='O')
1362  XSetForeground(display,gc1,mmap[10]);
1363 
1364  else if(oqual == 'Q' || oqual == 'C' )
1365  XSetForeground(display,gc1,mmap[11]);
1366 
1367  else
1368  XSetForeground(display,gc1,mmap[3]);
1369 
1370  if(oxvalue != -1) {
1371 
1372  if(xvalue >= oxvalue)
1373  xvalue=oxvalue-1;
1374 
1375  }
1376 
1377  XFillRectangle(display,bwindow[m],gc1,
1378  xvalue-dvalue,yvalue,
1379  dvalue-1,ymax-yvalue+1);
1380 
1381  oxvalue=xvalue-dvalue;
1382 
1383 
1384  }
1385  xvalue1=xvalue;
1386  yvalue1=yvalue;
1387  otim=stim;
1388 
1389 
1390  }
1391 
1392  }
1393 
1394 else {
1395 
1396 for(i=0;i<inum;i++) {
1397 
1398  tm.tm_year=values[i].zdate/10000-1900;
1399  tm.tm_mon=(values[i].zdate-(tm.tm_year+1900)*10000)/100;
1400  tm.tm_mday=values[i].zdate-(tm.tm_year+1900)*10000-tm.tm_mon*100;
1401  tm.tm_hour=values[i].ztime/10000;
1402  tm.tm_min=(values[i].ztime-tm.tm_hour*10000)/100;
1403 
1404  tm.tm_mon=tm.tm_mon;
1405  stim=ouptime(tm.tm_year+1900,tm.tm_mon,tm.tm_mday,tm.tm_hour,tm.tm_min,0);
1406 
1407  fxvalue=xmin+(float)(xmax-xmin)/(float)(letim-lbtim)*
1408  (float)(letim-stim);
1409 
1410  svalue=values[i].value;
1411 
1412  if(ilinear==1 &&
1413  save_rec[k].rate_table.AryMax >= 0) {
1414  flow=GetFlow(save_rec[k].stn_rec.id,'H',pe2,
1415  values[i].zdate,
1416  (double)svalue,
1417  &ierr);
1418 
1419  svalue=(double)flow;
1420 
1421  }
1422 
1423  fyvalue=ymax-(float)(ymin-ymax)/(float)(minv-maxv)*
1424  (float)(svalue-minv);
1425 
1426  yvalue=fyvalue;
1427  xvalue=fxvalue;
1428 
1429  if(oqual == 'S' || oqual == 'V' ||
1430  oqual == 'A' || oqual == 'B')
1431  XSetForeground(display,gc1,mmap[7]);
1432 
1433  else if(oqual == 'F' || oqual == 'X')
1434  XSetForeground(display,gc1,mmap[9]);
1435 
1436  else if(oqual == 'D' || oqual == 'E' || oqual=='O')
1437  XSetForeground(display,gc1,mmap[10]);
1438 
1439  else if(oqual == 'Q' || oqual == 'C' )
1440  XSetForeground(display,gc1,mmap[11]);
1441 
1442  else
1443  XSetForeground(display,gc1,mmap[3]);
1444 
1445  if(i > 0) {
1446 
1447  if(otim-stim < 7200L)
1448  XDrawLine(display,bwindow[m],gc1,xvalue,yvalue,
1449  xvalue1,yvalue1);
1450 
1451  else {
1452 
1453  XDrawArc(display,bwindow[m],gc1,xvalue1-2,yvalue1-2,
1454  4,4,0,360*64);
1455  XDrawArc(display,bwindow[m],gc1,xvalue-2,yvalue-2,
1456  4,4,0,360*64);
1457  }
1458 
1459  }
1460 
1461  xvalue1=xvalue;
1462  yvalue1=yvalue;
1463  otim=stim;
1464  oqual=values[i].qual;
1465 
1466  }
1467 
1468 }
1469 
1470 XSetForeground(display,gc1,mmap[5]);
1471 
1472 if(save_rec[k].polume!= 0) {
1473 
1474  for(i=0;i<qnum;i++) {
1475 
1476  tm.tm_year=qalues[i].zdate/10000-1900;
1477  tm.tm_mon=(qalues[i].zdate-(tm.tm_year+1900)*10000)/100;
1478  tm.tm_mday=qalues[i].zdate-(tm.tm_year+1900)*10000-tm.tm_mon*100;
1479  tm.tm_hour=qalues[i].ztime/10000;
1480  tm.tm_min=(qalues[i].ztime-tm.tm_hour*10000)/100;
1481 
1482  tm.tm_mon=tm.tm_mon;
1483  stim=ouptime(tm.tm_year+1900,tm.tm_mon,tm.tm_mday,
1484  tm.tm_hour,tm.tm_min,0);
1485 
1486  fxvalue=xmin+(float)(xmax-xmin)/(float)(letim-lbtim)*
1487  (float)(letim-stim);
1488 
1489  svalue=qalues[i].value;
1490 
1491  fyvalue=ymax-(float)(ymin-ymax)/(float)(minv-maxv)*
1492  (float)(svalue-minv);
1493 
1494  yvalue=fyvalue+.5;
1495  xvalue=fxvalue+.5;
1496 
1497  dxvalue=-(float)(xmax-xmin)/(float)(letim-lbtim)*
1498  (float)(3600*save_rec[k].polume);
1499 
1500  dvalue=dxvalue+.5;
1501 
1502  if(dvalue < 2)
1503  dvalue=2;
1504 
1505  if(ymax - yvalue == 0 && i > 0) {
1506 
1507  if(oqual != 'S' && oqual != 'V')
1508  XSetForeground(display,gc1,mmap[9]);
1509 
1510  else
1511  XSetForeground(display,gc1,mmap[5]);
1512 
1513  XDrawLine(display,bwindow[m],gc1,xvalue-dvalue,ymax,
1514  xvalue,ymax);
1515 
1516  }
1517 
1518  else {
1519 
1520  if(ymax-yvalue==0)
1521  XSetForeground(display,gc1,mmap[3]);
1522 
1523  else
1524  XSetForeground(display,gc1,mmap[5]);
1525 
1526  XFillRectangle(display,bwindow[m],gc1,
1527  xvalue-dvalue,yvalue,
1528  dvalue-1,ymax-yvalue+1);
1529 
1530 
1531  }
1532  xvalue1=xvalue;
1533  yvalue1=yvalue;
1534  otim=stim;
1535  oqual=qalues[i].qual;
1536 
1537  }
1538 
1539  }
1540 
1541 else {
1542 
1543 if((simflow==1 &&(strncmp(save_rec[k].parm,"QRIR",4)== 0 ||
1544  strncmp(save_rec[k].parm,"HGIR",4)== 0 ||
1545  strncmp(save_rec[k].parm,"QII2",4)== 0)) ||
1546  simsnow==1 && save_rec[k].parm[4]=='M') {
1547 
1548 for(i=0;i<qnum;i++) {
1549 
1550  tm.tm_year=qalues[i].zdate/10000-1900;
1551  tm.tm_mon=(qalues[i].zdate-(tm.tm_year+1900)*10000)/100;
1552  tm.tm_mday=qalues[i].zdate-(tm.tm_year+1900)*10000-tm.tm_mon*100;
1553  tm.tm_hour=qalues[i].ztime/10000;
1554  tm.tm_min=(qalues[i].ztime-tm.tm_hour*10000)/100;
1555 
1556  tm.tm_mon=tm.tm_mon;
1557  stim=ouptime(tm.tm_year+1900,tm.tm_mon,tm.tm_mday,tm.tm_hour,tm.tm_min,0);
1558 
1559  fxvalue=xmin+(float)(xmax-xmin)/(float)(letim-lbtim)*
1560  (float)(letim-stim);
1561 
1562  svalue=qalues[i].value;
1563 
1564  if(ilinear==1 &&
1565  save_rec[k].rate_table.AryMax >= 0) {
1566  flow=GetFlow(save_rec[k].stn_rec.id,'H',pe2,
1567  values[i].zdate,
1568  (double)svalue,
1569  &ierr);
1570 
1571  svalue=(double)flow;
1572 
1573  }
1574 
1575  fyvalue=ymax-(float)(ymin-ymax)/(float)(minv-maxv)*
1576  (float)(svalue-minv);
1577 
1578  yvalue=fyvalue;
1579  xvalue=fxvalue;
1580 
1581  XSetForeground(display,gc1,mmap[5]);
1582 
1583  if(i > 0) {
1584 
1585  if(otim-stim < 7200L)
1586  XDrawLine(display,bwindow[m],gc1,xvalue,yvalue,
1587  xvalue1,yvalue1);
1588 
1589  else {
1590 
1591  XDrawArc(display,bwindow[m],gc1,xvalue1-2,yvalue1-2,
1592  4,4,0,360*64);
1593  XDrawArc(display,bwindow[m],gc1,xvalue-2,yvalue-2,
1594  4,4,0,360*64);
1595  }
1596 
1597  }
1598 
1599  xvalue1=xvalue;
1600  yvalue1=yvalue;
1601  otim=stim;
1602  oqual=qalues[i].qual;
1603 
1604  }
1605 
1606 }
1607 
1608 }
1609 
1610 
1611 XSetForeground(display,gc1,mmap[7]);
1612 if(save_rec[k].rate_table.AryMax >= 0)
1613  flow=GetFlow(save_rec[k].stn_rec.id,'H',pe2,
1614  values[0].zdate,
1615  (double)max_min.max,
1616  &ierr);
1617 
1618 sprintf(buf,"Max=%6.1f",max_min.max);
1619 
1620 if(save_rec[k].rate_table.AryMax >= 0) {
1621 
1622  sprintf(abuf," %d",flow);
1623  strcat(buf,abuf);
1624 
1625  }
1626 
1627 sprintf(abuf," at %02d/%02d/%02d %02dZ",
1628  max_min.tmx.tm_mon,max_min.tmx.tm_mday,max_min.tmx.tm_year,
1629  max_min.tmx.tm_hour);
1630 
1631 strcat(buf,abuf);
1632 
1633 XDrawString(display,bwindow[m],gc1,xs+xparm1,ys+yparm1-yheight*(2+aflag),
1634  buf,strlen(buf));
1635 
1636 
1637 if(save_rec[k].rate_table.AryMax >= 0)
1638  flow=GetFlow(save_rec[k].stn_rec.id,'H',pe2,
1639  values[0].zdate,
1640  (double)max_min.min,
1641  &ierr);
1642 
1643 sprintf(buf,"Min=%6.1f",max_min.min);
1644 
1645 if(save_rec[k].rate_table.AryMax >= 0) {
1646 
1647  sprintf(abuf," %d",flow);
1648  strcat(buf,abuf);
1649 
1650  }
1651 
1652 sprintf(abuf," at %02d/%02d/%02d %02dZ",
1653  max_min.tmn.tm_mon,max_min.tmn.tm_mday,max_min.tmn.tm_year,
1654  max_min.tmn.tm_hour);
1655 
1656 strcat(buf,abuf);
1657 XDrawString(display,bwindow[m],gc1,xs+xparm1,ys+yparm1-yheight*(1+aflag),
1658  buf,strlen(buf));
1659 
1660 /*
1661 if(qnum != 0) {
1662 
1663 XSetForeground(display,gc1,mmap[5]);
1664 if(save_rec[k].rate_table.AryMax >= 0)
1665  flow=GetFlow(save_rec[k].stn_rec.id,'H',pe2,
1666  values[0].zdate,
1667  (double)max_min2.max,
1668  &ierr);
1669 
1670 sprintf(buf,"Max=%6.1f",max_min2.max);
1671 
1672 if(save_rec[k].rate_table.AryMax >= 0) {
1673 
1674  sprintf(abuf," %d",flow);
1675  strcat(buf,abuf);
1676 
1677  }
1678 
1679 sprintf(abuf," at %02d/%02d/%02d %02dZ",
1680  max_min2.tmx.tm_mon,max_min2.tmx.tm_mday,max_min2.tmx.tm_year,
1681  max_min2.tmx.tm_hour);
1682 
1683 strcat(buf,abuf);
1684 
1685 XDrawString(display,bwindow[m],gc1,xs+xparm1,ys+yparm1-yheight*2,
1686  buf,strlen(buf));
1687 
1688 
1689 if(save_rec[k].rate_table.AryMax >= 0)
1690  flow=GetFlow(save_rec[k].stn_rec.id,'H',pe2,
1691  values[0].zdate,
1692  (double)max_min2.min,
1693  &ierr);
1694 
1695 sprintf(buf,"Min=%6.1f",max_min2.min);
1696 
1697 if(save_rec[k].rate_table.AryMax >= 0) {
1698 
1699  sprintf(abuf," %d",flow);
1700  strcat(buf,abuf);
1701 
1702  }
1703 
1704 sprintf(abuf," at %02d/%02d/%02d %02dZ",
1705  max_min2.tmn.tm_mon,max_min2.tmn.tm_mday,max_min2.tmn.tm_year,
1706  max_min2.tmn.tm_hour);
1707 
1708 strcat(buf,abuf);
1709 XDrawString(display,bwindow[m],gc1,xs+xparm1,ys+yparm1-yheight*1,
1710  buf,strlen(buf));
1711 
1712 }
1713 */
1714 save_rec[k].is_realized=1;
1715 
1716 }
1717 
1718 struct max_min get_max_min(struct stn_values *stn_values,
1719  struct stn_values *ptn_values,int inum,int pnum)
1720 
1721 {
1722 
1723 struct max_min max_min;
1724 int i,xdate,xtime,ndate,ntime;
1725 double abs1,abs2;
1726 
1727 max_min.max=-999999;
1728 max_min.min= 999999;
1729 
1730 for(i=0;i<inum;i++) {
1731 
1732  if(stn_values[i].value > max_min.max) {
1733 
1735  xdate=stn_values[i].zdate;
1737 
1738  }
1739 
1740  if(stn_values[i].value < max_min.min) {
1741 
1743  ndate=stn_values[i].zdate;
1744  ntime=stn_values[i].ztime;
1745 
1746  }
1747 
1748 
1749  }
1750 
1751 for(i=0;i<pnum;i++) {
1752 
1753  if(ptn_values[i].value > max_min.max) {
1754 
1755  max_min.max=ptn_values[i].value;
1756 
1757 
1758  }
1759 
1760  if(ptn_values[i].value < max_min.min) {
1761 
1762  max_min.min=ptn_values[i].value;
1763 
1764 
1765  }
1766 
1767 
1768  }
1769 
1770 max_min.tmx.tm_year=xdate/10000-1900;
1771 max_min.tmx.tm_mon=(xdate-(max_min.tmx.tm_year+1900)*10000)/100;
1772 max_min.tmx.tm_mday=xdate-(max_min.tmx.tm_year+1900)*10000-max_min.tmx.tm_mon*100;
1773 max_min.tmx.tm_hour=xtime/10000;
1774 max_min.tmx.tm_min=(xtime-max_min.tmx.tm_hour*10000)/100;
1775 max_min.tmx.tm_mon=max_min.tmx.tm_mon;
1776 
1777 max_min.tmn.tm_year=ndate/10000-1900;
1778 max_min.tmn.tm_mon=(ndate-(max_min.tmn.tm_year+1900)*10000)/100;
1779 max_min.tmn.tm_mday=ndate-(max_min.tmn.tm_year+1900)*10000-max_min.tmn.tm_mon*100;
1780 max_min.tmn.tm_hour=ntime/10000;
1781 max_min.tmn.tm_min=(ntime-max_min.tmn.tm_hour*10000)/100;
1782 max_min.tmn.tm_mon=max_min.tmn.tm_mon;
1783 
1784 return(max_min);
1785 
1786 }
1787 
1788 /*
1789 struct max_min get_max_min(struct stn_values *stn_values,int inum)
1790 
1791 {
1792 
1793 struct max_min max_min;
1794 int i,xdate,xtime,ndate,ntime;
1795 double abs1,abs2;
1796 
1797 max_min.max=-999999;
1798 max_min.min= 999999;
1799 
1800 for(i=0;i<inum;i++) {
1801 
1802  if(stn_values[i].value > max_min.max) {
1803 
1804  max_min.max=stn_values[i].value;
1805  xdate=stn_values[i].zdate;
1806  xtime=stn_values[i].ztime;
1807 
1808  }
1809 
1810  if(stn_values[i].value < max_min.min) {
1811 
1812  max_min.min=stn_values[i].value;
1813  ndate=stn_values[i].zdate;
1814  ntime=stn_values[i].ztime;
1815 
1816  }
1817 
1818 
1819  }
1820 
1821 max_min.tmx.tm_year=xdate/10000-1900;
1822 max_min.tmx.tm_mon=(xdate-(max_min.tmx.tm_year+1900)*10000)/100;
1823 max_min.tmx.tm_mday=xdate-(max_min.tmx.tm_year+1900)*10000-max_min.tmx.tm_mon*100;
1824 max_min.tmx.tm_hour=xtime/10000;
1825 max_min.tmx.tm_min=(xtime-max_min.tmx.tm_hour*10000)/100;
1826 max_min.tmx.tm_mon=max_min.tmx.tm_mon;
1827 
1828 max_min.tmn.tm_year=ndate/10000-1900;
1829 max_min.tmn.tm_mon=(ndate-(max_min.tmn.tm_year+1900)*10000)/100;
1830 max_min.tmn.tm_mday=ndate-(max_min.tmn.tm_year+1900)*10000-max_min.tmn.tm_mon*100;
1831 max_min.tmn.tm_hour=ntime/10000;
1832 max_min.tmn.tm_min=(ntime-max_min.tmn.tm_hour*10000)/100;
1833 max_min.tmn.tm_mon=max_min.tmn.tm_mon;
1834 
1835 return(max_min);
1836 
1837 }
1838 */
1839 
1840 
1841 int get_delta_time(time_t lbtim,time_t letim)
1842 
1843 {
1844 
1845 int hours,dhours;
1846 
1847 hours=(lbtim-letim)/3600L;
1848 
1849 if(hours < 24)
1850  dhours=1;
1851 
1852 else if(hours < 96)
1853  dhours=3;
1854 
1855 else if(hours < 144)
1856  dhours=6;
1857 
1858 else if(hours < 288)
1859  dhours=24;
1860 
1861 else if(hours < 576)
1862  dhours=48;
1863 
1864 else if(hours < 1152)
1865  dhours=72;
1866 
1867 else if(hours < 2304)
1868  dhours=96;
1869 
1870 else if(hours < 4608)
1871  dhours=192;
1872 
1873 else
1874  dhours=30*24;
1875 
1876 return(dhours);
1877 
1878 }
1879 
1880 float get_delta_valu(int diff)
1881 
1882 {
1883 
1884 float dval;
1885 
1886 if(diff <= 1)
1887  dval=.1;
1888 
1889 else if(diff < 4)
1890  dval=.2;
1891 
1892 else if(diff < 10)
1893  dval=.5;
1894 
1895 else if(diff < 20)
1896  dval=1;
1897 
1898 else if(diff < 40)
1899  dval=2;
1900 
1901 else if(diff < 100)
1902  dval=5;
1903 
1904 else if(diff < 200)
1905  dval=10;
1906 
1907 else if(diff < 400)
1908  dval=20;
1909 
1910 else if(diff < 1000)
1911  dval=50;
1912 
1913 else if(diff < 2000)
1914  dval=100;
1915 
1916 else if(diff < 4000)
1917  dval=200;
1918 
1919 else if(diff < 10000)
1920  dval=500;
1921 
1922 else if(diff < 20000)
1923  dval=1000;
1924 
1925 else if(diff < 40000)
1926  dval=2000;
1927 
1928 else if(diff < 100000)
1929  dval=5000;
1930 
1931 else if(diff < 200000)
1932  dval=10000;
1933 
1934 else if(diff < 400000)
1935  dval=20000;
1936 
1937 else if(diff < 1000000)
1938  dval=50000;
1939 
1940 else if(diff < 2000000)
1941  dval=100000;
1942 
1943 else if(diff < 4000000)
1944  dval=200000;
1945 
1946 else
1947  dval=1000000;
1948 
1949 return(dval);
1950 
1951 }
1952 
1953 
1954 void options_draw(Widget w,XtPointer data,XmDrawingAreaCallbackStruct *call_data)
1955 
1956 {
1957 
1958 int k,j;
1959 Dimension width,height;
1960 Arg args[10];
1961 
1962 j=(int)data/100;
1963 
1964 k=(int)data-j*100;
1965 
1966 if(k==0)
1967  linear=0;
1968 
1969 if(k==1)
1970  linear=1;
1971 
1972 if(k==2)
1973  scale=0;
1974 
1975 if(k==3)
1976  scale=1;
1977 
1978 if(k==4)
1979  simflow=0;
1980 
1981 if(k==5)
1982  simflow=1;
1983 
1984 if(k==6)
1985  simsnow=0;
1986 
1987 if(k==7)
1988  simsnow=1;
1989 
1990 XtSetArg(args[0],XtNwidth,&width);
1991 XtSetArg(args[1],XtNheight,&height);
1992 XtGetValues(bdrawing_area[j],args,2);
1993 
1994 XSetFunction(display,gc1,GXcopy);
1995 XSetForeground(display,gc1,mmap[0]);
1996 XSetBackground(display,gc1,mmap[0]);
1997 XFillRectangle(display,bwindow[j],gc1,0,0,width,height);
1998 
1999 draw_area(j,j,0,0,width,height);
2000 
2001 }
2002 
2003 void quit_draw(Widget w,XtPointer data,XmDrawingAreaCallbackStruct *call_data)
2004 
2005 {
2006 
2007 int k;
2008 
2009 k=(int)data;
2010 
2011 
2012 XtDestroyWidget(bdrawing_area[k]);
2013 XtDestroyWidget(draw_dialog[k]);
2014 
2015 draw_dialog[k]=0;
2016 save_rec[k].inum=-1;
2017 
2018 }
2019 
2020 void bhandle_expose(Widget w,XtPointer data,XmDrawingAreaCallbackStruct *call_data)
2021 
2022 {
2023 
2024 int k;
2025 Dimension width,height;
2026 Arg args[10];
2027 
2028 k=(int)data;
2029 
2030 XtSetArg(args[0],XtNwidth,&width);
2031 XtSetArg(args[1],XtNheight,&height);
2032 XtGetValues(bdrawing_area[k],args,2);
2033 
2034 XSetFunction(display,gc1,GXcopy);
2035 XSetForeground(display,gc1,mmap[0]);
2036 XSetBackground(display,gc1,mmap[0]);
2037 
2038 XFillRectangle(display,bwindow[k],gc1,0,0,
2040 
2041 if(save_rec[k].is_realized==1)
2042  draw_area(k,k,0,0,width,height);
2043 
2044 
2045 }
2046 
2047 void get_units(char *ibuf,char *sbuf)
2048 
2049 {
2050 
2051  if(strncasecmp("P",ibuf,1)==0 ||
2052  strncasecmp("S",ibuf,1)==0)
2053  strcpy(sbuf,"INCHES");
2054 
2055  else if(strncasecmp("T",ibuf,1)==0)
2056  strcpy(sbuf,"DEGREES F");
2057 
2058  else if(strncasecmp("X",ibuf,1)==0)
2059  strcpy(sbuf,"PERCENT");
2060 
2061  else if(strncasecmp("H",ibuf,1)==0)
2062  strcpy(sbuf,"FEET");
2063 
2064  else if(strncasecmp("L",ibuf,1)==0)
2065  strcpy(sbuf,"KAC-FT");
2066 
2067  else if(strncasecmp("Q",ibuf,1)==0 && strlen(ibuf) > 3 &&
2068  strncasecmp("M",&ibuf[2],1)==0)
2069  strcpy(sbuf,"KAC-FT");
2070 
2071  else if(strncasecmp("Q",ibuf,1)==0 && strlen(ibuf) > 3 &&
2072  strncasecmp("D",&ibuf[2],1)==0)
2073  strcpy(sbuf,"KAC-FT");
2074 
2075  else if(strncasecmp("QRD1Z",ibuf,5)==0)
2076  strcpy(sbuf,"KCFS");
2077 
2078  else if(strncasecmp("Q",ibuf,1)==0)
2079  strcpy(sbuf,"CFS");
2080 
2081  else if(strncasecmp("US",ibuf,2)==0)
2082  strcpy(sbuf,"MILES PER HOUR");
2083 
2084  else if(strncasecmp("UD",ibuf,2)==0)
2085  strcpy(sbuf,"DEGREES");
2086 
2087 
2088  else
2089  strcpy(sbuf,"VALUE");
2090 
2091 }
2092 
2093 
2094 void get_acronym(char *ibuf,char *sbuf)
2095 
2096 {
2097 
2098  sbuf[0]=0;
2099  if(strncasecmp("HG",ibuf,2)==0)
2100  strcat(sbuf,"RIVER STAGE");
2101 
2102  else if(strncasecmp("HP",ibuf,2)==0)
2103  strcat(sbuf,"RESERVOIR POOL ELEVATION");
2104 
2105  else if(strncasecmp("LS",ibuf,2)==0)
2106  strcat(sbuf,"LAKE STORAGE");
2107 
2108  else if(strncasecmp("PC",ibuf,2)==0)
2109  strcat(sbuf,"PRECIPITATION ACCUMULATION");
2110 
2111  else if(strncasecmp("PP",ibuf,2)==0)
2112  strcat(sbuf,"PRECIPITATION INCREMENTAL");
2113 
2114  else if(strncasecmp("QC",ibuf,2)==0)
2115  strcat(sbuf,"RUNOFF VOLUME");
2116 
2117  else if(strncasecmp("QD",ibuf,2)==0)
2118  strcat(sbuf,"DISCHARGE-DIVERSION");
2119 
2120  else if(strncasecmp("QI",ibuf,2)==0)
2121  strcat(sbuf,"DISCHARGE-INFLOW");
2122 
2123  else if(strncasecmp("QR",ibuf,2)==0)
2124  strcat(sbuf,"DISCHARGE-RIVER");
2125 
2126  else if(strncasecmp("QT",ibuf,2)==0)
2127  strcat(sbuf,"DISCHARGE-OUTFLOW");
2128 
2129  else if(strncasecmp("SD",ibuf,2)==0)
2130  strcat(sbuf,"SNOW DEPTH");
2131 
2132  else if(strncasecmp("SW",ibuf,2)==0)
2133  strcat(sbuf,"SNOW WATER EQUIVALENT");
2134 
2135  else if(strncasecmp("TA",ibuf,2)==0)
2136  strcat(sbuf,"AIR TEMPERATURE");
2137 
2138  else if(strncasecmp("US",ibuf,2)==0)
2139  strcat(sbuf,"WIND SPEED");
2140 
2141  else if(strncasecmp("UD",ibuf,2)==0)
2142  strcat(sbuf,"WIND DIRECTION");
2143 
2144  else if(strncasecmp("UQ",ibuf,2)==0)
2145  strcat(sbuf,"WIND SPEED/DIRECTION");
2146 
2147  else if(strncasecmp("XR",ibuf,2)==0)
2148  strcat(sbuf,"RELATIVE HUMIDITY");
2149 
2150  else
2151  strcat(sbuf,"UNKNOWN");
2152 
2153  strcat(sbuf,",");
2154 
2155  if(strncasecmp("I",&ibuf[2],1)==0)
2156  strcat(sbuf,"INSTANTANEOUS");
2157 
2158  else if(strncasecmp("D",&ibuf[2],1)==0)
2159  strcat(sbuf,"DAILY");
2160 
2161  else if(strncasecmp("Q",&ibuf[2],1)==0)
2162  strcat(sbuf,"SIX HOURLY");
2163 
2164  else if(strncasecmp("M",&ibuf[2],1)==0)
2165  strcat(sbuf,"MONTHLY");
2166 
2167  else
2168  strcat(sbuf,"UNKNOWN");
2169 
2170  strcat(sbuf,",");
2171 
2172  if(strncasecmp("R",&ibuf[3],1)==0)
2173  strcat(sbuf,"OBSERVED");
2174 
2175  else if(strncasecmp("P",&ibuf[3],1)==0)
2176  strcat(sbuf,"PROCESSED");
2177 
2178  else if(strncasecmp("1",&ibuf[3],1)==0)
2179  strcat(sbuf,"PROCESSED LEVEL 1");
2180 
2181  else if(strncasecmp("2",&ibuf[3],1)==0)
2182  strcat(sbuf,"PROCESSED LEVEL 2");
2183 
2184  else if(strncasecmp("F",&ibuf[3],1)==0)
2185  strcat(sbuf,"FORECAST");
2186 
2187  else
2188  strcat(sbuf,"UNKNOWN");
2189 
2190  strcat(sbuf,",");
2191 
2192  if(strncasecmp("Z",&ibuf[4],1)==0)
2193  strcat(sbuf,"STP/SAO");
2194 
2195  else if(strncasecmp("G",&ibuf[4],1)==0)
2196  strcat(sbuf,"GOES");
2197 
2198  else if(strncasecmp("M",&ibuf[4],1)==0)
2199  strcat(sbuf,"METEOR");
2200 
2201  else if(strncasecmp("P",&ibuf[4],1)==0)
2202  strcat(sbuf,"PHONE");
2203 
2204  else if(strncasecmp("R",&ibuf[4],1)==0)
2205  strcat(sbuf,"RADIO");
2206 
2207  else
2208  strcat(sbuf,"UNKNOWN");
2209 
2210  if(strncasecmp("Z",&ibuf[5],1)!=0)
2211  strcat(sbuf,",");
2212 
2213  if(strncasecmp("X",&ibuf[5],1)==0)
2214  strcat(sbuf,"MAXIMUM:DAILY");
2215 
2216  else if(strncasecmp("N",&ibuf[5],1)==0)
2217  strcat(sbuf,"MINIMUM:DAILY");
2218 
2219  if(strncasecmp("Z",&ibuf[6],1)!=0)
2220  strcat(sbuf,", ");
2221 
2222  if(strncasecmp("F",&ibuf[6],1)==0)
2223  strcat(sbuf,".05");
2224 
2225  else if(strncasecmp("N",&ibuf[6],1)==0)
2226  strcat(sbuf,".95");
2227 
2228  return;
2229 
2230 }
2231 /*
2232 void to_stage(char *hb5,char pe1,char pe2,struct stn_values *stn_values,int inum)
2233 
2234 {
2235 
2236 int i;
2237 int ierr;
2238 int qflow;
2239 double qstage;
2240 
2241 for(i=0;i<inum;i++) {
2242 
2243  qflow=stn_values[i].value*1000;
2244  qstage=GetStage(hb5,pe1,pe2,stn_values[i].zdate,
2245  qflow,&ierr);
2246 
2247  stn_values[i].value=qstage;
2248 
2249  }
2250 
2251 return;
2252 
2253 }
2254 
2255 Widget BuildPulldownToggleMenu(Widget parent,char *menu_title,char menu_mnemonic,struct MenuItem *items)
2256 
2257 
2258 {
2259 
2260  Widget Pulldown, button;
2261  int i;
2262  int argcount;
2263  Arg args[10];
2264 
2265  argcount=0;
2266 
2267  XtSetArg(args[argcount],XmNbackground,mmap[1]);argcount++;
2268  XtSetArg(args[argcount],XmNforeground,mmap[0]);argcount++;
2269  Pulldown=XmCreatePulldownMenu(parent,"pulldown",args,argcount);
2270  XtSetArg(args[argcount],XmNselectColor,mmap[4]);argcount++;
2271 
2272  for(i=0;items[i].label!=NULL;i++) {
2273 
2274  button=XmCreateToggleButton(Pulldown,items[i].label,args,argcount);
2275  XtAddCallback(button,XmNvalueChangedCallback,items[i].callback,items[i].callback_data);
2276 
2277  XtManageChild(button);
2278 
2279  }
2280 
2281  return(Pulldown);
2282 
2283 }
2284 
2285 Widget BuildPulldownPushMenu(Widget parent,char *menu_title,char menu_mnemonic,struct MenuItem *items)
2286 
2287 
2288 {
2289 
2290  Widget Pulldown, button;
2291  int i;
2292  int argcount;
2293  Arg args[10];
2294 
2295  argcount=0;
2296 
2297  XtSetArg(args[argcount],XmNbackground,mmap[1]);argcount++;
2298  XtSetArg(args[argcount],XmNforeground,mmap[0]);argcount++;
2299  Pulldown=XmCreatePulldownMenu(parent,"pulldown",args,argcount);
2300 
2301  for(i=0;items[i].label!=NULL;i++) {
2302 
2303  button=XmCreatePushButton(Pulldown,items[i].label,args,argcount);
2304  XtAddCallback(button,XmNactivateCallback,items[i].callback,
2305  items[i].callback_data);
2306  XtManageChild(button);
2307 
2308  }
2309 
2310 return(Pulldown);
2311 
2312 }
2313 
2314 Widget AttachToCascade(Widget parent, char *label,Widget sub_menu)
2315 
2316 {
2317 Arg args[10];
2318 Cardinal argcount;
2319 Widget cbutton;
2320 
2321 argcount=0;
2322 XtSetArg(args[argcount],XmNsubMenuId,sub_menu);argcount++;
2323 XtSetArg(args[argcount],XmNbackground,mmap[1]);argcount++;
2324 XtSetArg(args[argcount],XmNforeground,mmap[0]);argcount++;
2325 cbutton=XmCreateCascadeButton(parent,label,args,argcount);
2326 XtManageChild(cbutton);
2327 return(cbutton);
2328 
2329 }
2330 
2331 */
static int i
char fbuf[100]
Definition: decode_HDP.c:2
void bhandle_expose()
int get_delta_time(time_t lbtim, time_t letim)
int hour
Definition: display_data.c:26
Widget bmain_window
Definition: mapper.c:181
XFontStruct * info_font[10]
Definition: mapper.c:195
unsigned long mmap[16]
Definition: mapper.c:117
int display_method
Definition: subdisplay.c:34
GC gc1
Definition: subdisplay.c:51
int max_height
Definition: display_data.c:5
Widget top_level
Definition: display_rec.c:5
struct stn_values * stn_values
Definition: mapper.c:124
int scale
Definition: display_data.c:4
Widget draw_dialog[10]
Definition: mapper.c:180
int day
Definition: display_data.c:26
int bmax_width
int days
Definition: display_data.c:26
void get_new_values()
int linear
Definition: display_data.c:4
void draw_area(int k, int m, int xs, int ys, int xz, int yz)
Definition: display_data.c:535
int bmax_height
Definition: display_data.c:4
Widget bdrawing_area[10]
Definition: mapper.c:182
Window bwindow[20]
Definition: mapper.c:189
void get_units(char *ibuf, char *sbuf)
Display * display
Definition: mapper.c:159
Font font[10]
Definition: mapper.c:161
int max_width
Definition: mapper.c:99
int init_subdisplay
Definition: mapper.c:48
int year
Definition: display_data.c:26
Window root_win
Definition: display_data.c:10
char qual[10]
Definition: subdisplay.c:33
void get_acronym(char *ibuf, char *sbuf)
int simsnow
Definition: display_data.c:4
void quit_draw()
int simflow
Definition: display_data.c:4
int month
Definition: display_data.c:26
float get_delta_valu(int diff)
struct max_min get_max_min(struct stn_values *stn_values, struct stn_values *ptn_values, int inum, int pnum)
void options_draw()
void display_data(char *hb5, char *pc, int dmonth, int dday, int dyear, int dhour, int ddays, char *fname)
Definition: display_data.c:28
void berror(Widget widget, char *string)
Definition: display_rec.c:392
Widget text
Definition: display_rec.c:5
char values[]
Definition: ffg.c:44
struct stat buf
Definition: is_file_closed.c:8
long ouptime(int year, int month, int day, int hour, int minute, int second)
Definition: ouptime.c:10
Widget AttachToCascade(Widget, char *, Widget)
Definition: mapper.c:771
Widget BuildPulldownPushMenu(Widget, char *, char, struct MenuItem *)
Definition: mapper.c:747
int GetFlow(char *, char, char, int, double, int *)
Definition: rat.c:1746
double GetStage(char *, char, char, int, int, int *)
Definition: rat.c:2110
static RatingTable rate_table
Definition: rat.c:131
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
system(tarbuf)
int j
Definition: mapp2h.h:48
int k
Definition: mapp2h.h:48
struct dval dval
Definition: mapper.c:148
Widget menu_bar
Definition: mapper.c:185
time_t xtime[500]
Definition: mapper.c:150
long xmax
float value
long ymax
Dimension height
Dimension width
int yheight
Arg args[10]
long xmin
long ymin
char fname[100]
Definition: send_afos.c:6
Definition: misc.h:459
char * label
Definition: misc.h:461
void(* callback)()
Definition: misc.h:463
XtPointer callback_data
Definition: misc.h:464
double HMax
Definition: rate_table.h:16
double RatStg[100]
Definition: rate_table.h:12
double wrn
Definition: rate_table.h:20
double fld
Definition: rate_table.h:21
Definition: misc.h:470
Definition: misc.h:61
struct tm tmx
Definition: misc.h:65
float min
Definition: misc.h:64
float max
Definition: misc.h:63
struct tm tmn
Definition: misc.h:66
Definition: misc.h:213
struct stim btim
Definition: misc.h:219
RatingTable rate_table
Definition: misc.h:217
int polume
Definition: misc_new.h:273
struct stim etim
Definition: misc.h:220
char parm[10]
Definition: misc.h:216
int pnum
Definition: misc_new.h:271
int volume
Definition: misc.h:222
int is_realized
Definition: misc.h:223
int inum
Definition: misc.h:221
Definition: misc.h:93
int day
Definition: misc.h:97
int year
Definition: misc.h:95
int hour
Definition: misc.h:98
int month
Definition: misc.h:96
Definition: misc.h:135
char id[6]
Definition: misc.h:137
char des[51]
Definition: misc.h:139
char qual
Definition: hydro_data.h:36
float value
Definition: hydro_data.h:35
struct stim btim
Definition: subdisplay.c:30
struct stim etim
Definition: subdisplay.c:31
tim()
Definition: tim.c:4