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