Daily_QC
daily_qc.c
Go to the documentation of this file.
1 #define _POSIX_SOURCE
2 #include "prototypes_new.h"
3 #include "/usr/include/X11/bitmaps/boxes"
4 #include "/usr/include/X11/bitmaps/cross_weave"
5 
6 char defarea[20];
7 
8 int pbase[]={-10,-5,5,15,25,30,35,35,25,15,5,-5};
9 
10 int tscale;
12 
13 char *mon[]={"jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"};
14 
15 char hrap_tgage_file[1000];
17 int maxmin_used=-1;
19 int init_maxmin=-1;
20 int add_max_flag=-1;
21 int add_min_flag=-1;
22 struct maxmin *maxmin;
23 
24 long int grey;
25 float pxtemp=1.0;
26 
27 int new_day_hour=14;
28 
29 int tcmode=2;
30 Widget rowcol17;
31 Widget tcwidget[3];
32 
33 int dcmode=2;
34 Widget rowcol18;
35 Widget dcwidget[3];
36 
37 int abmode=2;
38 Widget rowcol16;
39 Widget abwidget[3];
40 Widget rowcol15;
41 int dmvalue=1.0*100*3.28/.55;
42 Widget rswidget[3];
43 int rsmode=1;
44 
47 int flf_on=-1;
48 int qpf_on=-1;
49 int maxmin_on=-1;
50 
51 Widget gpbutton;
52 Widget rpbutton;
53 Widget rowcol1;
54 Widget rowcol10;
57 
58 XColor colors[256];
60 int zscale;
62 Widget mbutton[100];
63 
64 int mmflag=0;
65 
66 int group_edit=0;
67 int group_qual=8;
68 Widget group_dialog;
69 
70 char snow_file[1000];
71 
72 int render_all=1;
73 int topo_number=-1;
74 int isoh_number=-1;
75 int max_number=-1;
76 int min_number=-1;
77 
78 Widget topo_toggle_button=NULL;
79 Widget isoh_toggle_button=NULL;
80 Widget max_toggle_button=NULL;
81 Widget min_toggle_button=NULL;
82 
83 
84 Widget daywidget;
85 int maxdays=10;
86 struct ts ts[20];
87 int tsmax=0;
88 
89 int maxgif;
90 float giflat[5],giflon[5];
91 char gif_file[1000];
92 char gifbuf[1000];
93 int first=0;
94 int data_view=0;
95 struct stn_rec stn_rec;
96 int bmax_width=600,bmax_height=400;
98 char type[5];
100 Widget edit_dialog=NULL;
101 GC gc1;
103 int wfo_in_use[20];
104 int wfo_all=1;
105 struct tag tag[20];
106 
108 
110 Window bwindow[20];
111 struct save_rec save_rec[20];
113 Widget bdrawing_area[10];
114 Widget draw_dialog[10];
116 
118 
119 float filter_value=0;
122 float topo_scale=1.0;
123 
124 char topo_buf[100];
125 
127 
128 float delim[15][16];
129 
130 unsigned long dmap[16];
132 
133 struct forecast_basins forecast_basins[500];
135 
136 char obs_archive_file[1000];
137 char scratch_file[1000];
138 char rfc[100];
139 
140 time_t btim;
141 int isom=-1,old_isom=-1;
142 int smonth=0,emonth=0;
143 
144 char *timefile[]={"12z-18z","18z-00z","00z-06z","06z-12z","12z-12z"};
145 char *ttimefile[]={"12z","18z","00z","06z","12z.max","12z.min"};
146 char *ztimefile[]={"12z","18z","00z","06z"};
147 char rec_found[50];
148 
150 
152 struct bad_daily_values bad_values[6000];
153 struct bad_daily_values bad_tvalues[6000];
154 time_t tim;
155 
157 
158 int funct[]={8,0,6,2,3,4,5,1,7,9};
159 int func[]={8,0,3,1};
160 
161 int gage_char[2];
162 
164 int quit_flag=0;
167 
168 struct map map[1500];
169 struct pdata pdata[10];
170 struct zdata zdata[10];
171 struct tdata tdata[10];
172 
175 char basin_file[1000],hrap_file[1000],pcpn_file[1000],proc_pcpn_file[1000];
176 char basin_climo_file[1000];
177 char zpoint1_file[1000],zpoint2_file[1000],zgrid_file[1000];
178 char tpoint1_file[1000],tpoint2_file[1000],tgrid_file[1000];
179 char map_file[1000],dbase_in[1000],dbase_out[1000],map_out[1000];
180 char grid_out[1000],zgrid_out[1000],tgrid_out[1000];
181 char zdbase_out[1000],zmap_out[1000];
182 char tdbase_out[1000],tmap_out[1000];
183 char grid_file[1000];
184 char rsel_file[1000];
185 char mat_file[1000];
186 char hrap_gage_file[1000];
187 char hrap_zgage_file[1000];
188 char ngrid_file[1000];
189 
191 
193 Widget mwidget[50];
194 
195 struct station station[3000];
196 struct station zstation[500];
197 struct station tstation[1000];
198 
204 
205 XImage *image;
206 
207 Region region;
208 Pixmap pixm;
209 Pixmap pixb;
210 Pixmap logo[4];
211 unsigned int w_logo[4],h_logo[4];
212 int xh_logo[4],yh_logo[4];
213 
216 Widget bwidget[10],awidget[10],edwidget[5],bdwidget[5],scwidget[3];
217 Widget pcpn_widget=NULL,z_widget=NULL,maxmin_widget=NULL;
219 
223 
224 GC gc;
225 unsigned long zmap[16],xmap[16],imap[16],nmap[16],qmap[16],tmap[50],vmap[50];
226 unsigned long mmap[16],cmap[16],amap[16],rmap[16],mnmap[16];
227 
228 Display *display;
230 XFontStruct *info_font[10];
231 Font font[10];
232 
233 struct display_set display_set[4];
234 
240 struct MenuItem ktems[100];
241 struct MenuItem area_items[10];
243 int pcp_in_use[500];
244 int fgbgflag=1;
245 
246 int pcp_flag=0;
247 
250 int exp_flag=-1;
253 int zoom_once=1;
254 int method=2;
255 int posit;
269 int kscale=0,iscale=0;
272 
273 float stddev=3.0;
274 signed long xclip=25,yclip=25;
275 Dimension owidth,oheight;
276 
277 struct pcp *pcp;
278 struct pcp *spf;
279 struct pcp *tpf;
280 
281 /* flags for gridded, points and MAPS widgets */
282 
284 
286 struct topo *topo=NULL;
287 struct isoh *isoh=NULL;
288 
289 int opoint[2],npoint[2],off[100],zoom=1;
290 unsigned car[100];
291 struct maplayer *smaplayer[100];
292 struct dval dval;
293 int dflag[10],qflag[10];
294 XtAppContext app;
295 
296 String fallbacks[]={"*fontList: -adobe-helvetica-medium-r-*-12-*",NULL};
297 
298 void get_default_area();
300 void find_name();
301 void quit_callback();
302 void quit_all();
303 void quit_all2();
304 void ok_dbase();
312 void change_plot();
319 void clear_error_widget();
326 void send_dbase();
327 void send_dbase2();
328 void bmessage();
329 void quit();
330 void cancel_dbase();
331 void save_dbase();
333 void kill_dialog();
334 void new_filter();
337 void new_dm();
338 void make_gif();
340 void get_bad_snotel();
342 void apply_group();
343 void apply_tgroup();
345 void change_edit_stations();
346 void change_zedit_stations();
347 void change_tedit_stations();
352 
353 int main(int argc, char **argv)
354 {
355 
356 int depth, argcount,i;
357 FILE *fp;
358 int line_style,cap_style,join_style,j;
359 unsigned line_width;
360 char *fontname;
361 Arg args[20];
362 extern int optind,opterr,optopt;
363 extern char *optarg;
364 int c;
365 char ibuf[500];
366 char *tstring;
367 
368 defarea[0]=0;
369 
370 while((c=getopt(argc,argv,"n:h:a:"))!=-1){
371 
372  switch(c) {
373 
374  case 'n':
375 
376  maxdays=atoi(optarg);
377  break;
378 
379  case 'h':
380 
381  new_day_hour=atoi(optarg);
382  break;
383 
384 
385  case 'a':
386 
387  strcpy(defarea,optarg);
388  break;
389 
390 
391 
392  default:
393 
394  exit(1);
395 
396  }
397 
398  }
399 
400 
401 rec_found[0]=0;
402 
403 for(i=0;i<7;i++) {
404 
405  if(i==0)
406  dflag[i]=-1;
407  else
408  dflag[i]=1;
409 
410 }
411 
412 for(i=0;i<10;i++)
413  qflag[i]=1;
414 
415 qflag[6]=-1;qflag[7]=-1;
416 
417 for(i=0;i<6000;i++) {
418 
419  bad_values[i].used=0;
420  bad_tvalues[i].used=0;
421 
422  }
423 
424 for(j=0;j<100;j++){
425 
426  smaplayer[j]=NULL;
427  car[j]=-1;
428  off[j]=-1;
429 
430  }
431 
432 fp=fopen("area","r");
433 
434 if(fp==NULL) {
435 
436  printf("could not open area\n");
437  exit(1);
438 
439  }
440 
441 /* build area menu */
442 
443 get_area_menu(fp);
444 fclose(fp);
445 
446 npoint[0]=opoint[0]=320;
447 npoint[1]=opoint[1]=240;
448 zoom=1;
449 
450 /*Create and initialize the top-level widget */
451 
452 XtSetLanguageProc(NULL,NULL,NULL);
453 
454 top_level = XtVaAppInitialize(&app,"daily_qc",NULL,0,&argc,argv,fallbacks,NULL);
455 /*top_level = XtVaAppInitialize(&app,"daily_qc",NULL,0,&argc,argv,NULL,NULL);*/
456 
457 tstring="daily_qc 3.0";
458 
459 XtSetArg(args[0],XmNtitle,tstring);
460 XtSetValues(top_level,args,1);
461 
462 /*Initialize the Main Window */
463 
464 argcount=0;
465 XtSetArg(args[argcount],XmNwidth,774);argcount++;
466 XtSetArg(args[argcount],XmNheight,580);argcount++;
467 XtSetArg(args[argcount],XmNbackground,0);argcount++;
468 main_window=XmCreateMainWindow(top_level,"Main",args,argcount);
469 XtManageChild(main_window);
470 
471 owidth=640;
472 oheight=480;
473 
474 /* Create the drawing area */
475 
476 argcount=0;
477 XtSetArg(args[argcount],XmNwidth,774);argcount++;
478 XtSetArg(args[argcount],XmNheight,540);argcount++;
479 XtSetArg(args[argcount],XmNresizePolicy,XmRESIZE_ANY);argcount++;
480 XtSetArg(args[argcount],XmNbackground,0);argcount++;
481 drawing_area=XmCreateDrawingArea(main_window,"drawing_area",args,argcount);
482 
483 XtManageChild(drawing_area);
484 
485 XmMainWindowSetAreas(main_window,NULL,NULL,NULL,NULL,drawing_area);
486 
487 display=XtDisplay(drawing_area);
488 
489 fontname="*Adobe-Helvetica-Medium-r-normal-*-10-*";
490 font[0]=XLoadFont(display,fontname);
491 info_font[0]=XQueryFont(display,font[0]);
492 
493 fontname="*Adobe-Helvetica-Medium-o-normal-*-10-*";
494 font[1]=XLoadFont(display,fontname);
495 info_font[1]=XQueryFont(display,font[1]);
496 
497 fontname="*Adobe-Helvetica-Medium-r-normal-*-14-*";
498 font[2]=XLoadFont(display,fontname);
499 info_font[2]=XQueryFont(display,font[2]);
500 
501 fontname="*Adobe-Helvetica-Medium-r-normal-*-12-*";
502 font[3]=XLoadFont(display,fontname);
503 info_font[3]=XQueryFont(display,font[3]);
504 
505 fontname="*Adobe-Helvetica-Medium-r-normal-*-10-*";
506 font[4]=XLoadFont(display,fontname);
507 info_font[4]=XQueryFont(display,font[4]);
508 
509 legendxsize =XTextWidth(info_font[0],"10.0 to 10.0",12) + rs + 10 + 10;
510 
511 root_win=RootWindow(display,DefaultScreen(display));
512 max_width=DisplayWidth(display,DefaultScreen(display));
513 max_height=DisplayHeight(display,DefaultScreen(display));
514 depth=DefaultDepth(display,DefaultScreen(display));
515 
518 
519 /* Set up cursor pixmaps */
520 
521 /*Make Colors and Create GC */
522 
524 
525 gc= XCreateGC(display,pixm,0,0);
526 
529 
530 image=XGetImage(display,pixm,0,0,max_width,max_height,AllPlanes,ZPixmap);
531 
532 argcount=0;
533 menu_bar=XmCreateMenuBar(main_window,"Menubar",args,argcount);
534 XtManageChild(menu_bar);
535 
536 line_width=0;
537 line_style=LineSolid;
538 cap_style=CapButt;
539 join_style=JoinMiter;
540 
541 XSetLineAttributes(display,gc,line_width,line_style,cap_style,join_style);
542 
543 XtAddCallback(drawing_area,XmNexposeCallback,handle_expose,NULL);
544 XtAddCallback(drawing_area,XmNresizeCallback,handle_resize,NULL);
545 XtAddEventHandler(drawing_area,ButtonPressMask,FALSE,handle_mouse,NULL);
546 
547 XtRealizeWidget(top_level);
548 window=XtWindow(drawing_area);
549 
550 watch_cursor=XCreateFontCursor(display,XC_watch);
551 crosshair_cursor=XCreateFontCursor(display,XC_crosshair);
552 dotbox_cursor=XCreateFontCursor(display,XC_plus);
553 
554 if(XReadBitmapFile(display,root_win,"/usr/include/X11/bitmaps/left_ptr",&w_logo[1],&h_logo[1],&logo[1],&xh_logo[1],&yh_logo[1])!=BitmapSuccess)
555  printf("could not find /usr/include/X11/bitmaps/left_ptr\n");
556 
557 if(XReadBitmapFile(display,root_win,"/usr/include/X11/bitmaps/boxes",&w_logo[0],&h_logo[0],&logo[0],&xh_logo[0],&yh_logo[0])!=BitmapSuccess)
558  printf("could not find /usr/include/X11/bitmaps/boxes\n");
559 
560 if(XReadBitmapFile(display,root_win,"/usr/include/X11/bitmaps/cross_weave",&w_logo[2],&h_logo[2],&logo[2],&xh_logo[2],&yh_logo[2])!=BitmapSuccess)
561  printf("could not find /usr/include/X11/bitmaps/cross_weave\n");
562 XGrabButton(display,AnyButton,AnyModifier,window,TRUE,
563  ButtonPressMask | ButtonMotionMask | ButtonReleaseMask,
564  GrabModeAsync,GrabModeAsync,XtWindow(top_level),
565  XCreateFontCursor(display,XC_crosshair));
566 
567 XDefineCursor(display,root_win,dotbox_cursor);
568 
569 XmUpdateDisplay(top_level);
570 
571 
572 if(defarea[0]==0) {
573  /*test_menu();*/
575 
576 
577 } else {
579 }
580 
581 XtAppMainLoop(app);
582 
583 }
584 
586 
587 {
588 
589 int i;
590 char tstring[1000];
591 int argcount;
592 Arg args[10];
593 struct tm *gmtim;
594 
595 tim=time(NULL);
596 gmtim=gmtime(&tim);
597 
598 if(gmtim->tm_hour >= new_day_hour) {
599 
600  tim=tim+86400;
601 
602  gmtim=gmtime(&tim);
603 
604  }
605 
606 begin_year=gmtim->tm_year+1900;
607 begin_month=gmtim->tm_mon+1;
608 begin_day=gmtim->tm_mday;
609 
610 for(i=0;i<10;i++) {
611  if(area_items[i].label==NULL)
612  break;
613 
614  if(strcmp(defarea,area_items[i].label)==0) {
615 
616  sprintf(tstring,"daily_qc 3.0 (%s)",defarea);
617  XtSetArg(args[0],XmNtitle,tstring);
618  XtSetValues(top_level,args,1);
619 
620  area_select(drawing_area,area_items[i].callback_data);
621  return;
622 
623  }
624 
625 printf("could not find %s\n",defarea);
626 exit(1);
627 
628 }
629 
630 
631 }
632 
634 {
635 
636 int i;
637 Arg args[10];
638 Cardinal argcount;
639 
640 fgbgflag=1;
641 for(i=0;i<100;i++)
642  off[i]=-1;
643 
644 add_topo_flag=-1;
646 add_max_flag=-1;
647 add_min_flag=-1;
648 
649 i=0;
650 while(ktems[i].label!=NULL) {
651 
652  argcount=1;
653  XtSetArg(args[0],XmNset,False);
654  XtSetValues(mbutton[i],args,argcount);
655  i++;
656 
657 }
658 
659 argcount=1;
660 XtSetArg(args[0],XmNset,True);
661 XtSetValues(fgbg_toggle_button,args,argcount);
662 
663 send_expose();
664 
665 }
666 
667 void change_begin_color(Widget w,XtPointer data,XtPointer junk)
668 
669 {
670 
671 Cardinal argcount;
672 Arg args[10];
673 int i;
674 
675 begin_index=(int)data;
676 
677 for(i=0;i<3;i++) {
678 
679  argcount=0;
680  if(i==(int)data) {
681 
682 
683  }
684 
685  else{
686 
687 
688  }
689 
690  XtSetValues(bdwidget[i],args,argcount);
691  }
692 
693 }
694 
695 int mday[]={31,28,31,30,31,30,31,31,30,31,30,31} ;
696 
697 void change_begin_date(Widget w,XtPointer data,XtPointer junk)
698 
699 {
700 
701 
702 char buf[100];
703 XmString btn_text;
704 Arg args[10];
705 
706 if (begin_year==1972 || begin_year==1976 || begin_year==1980 ||
707  begin_year==1984 || begin_year==1988 || begin_year==1992 ||
708  begin_year==1996 || begin_year==2000 || begin_year==2004 ||
709  begin_year==2008 || begin_year==2012 || begin_year==2016)
710  mday[1]=29;
711 
712 else
713  mday[1]=28;
714 
715 if(begin_index==2) {
716 
717  if((int)data==0)
718  begin_year++;
719 
720  else
721  begin_year--;
722 
723  }
724 
725 else if(begin_index==0) {
726 
727  if((int)data==0)
728  begin_month++;
729 
730  else
731  begin_month--;
732 
733  if(begin_month==0) {
734 
735  begin_month=12;
736  begin_year--;
737 
738  }
739 
740  else if(begin_month==13) {
741 
742  begin_month=1;
743  begin_year++;
744 
745  }
746 
747 }
748 
749 else if(begin_index==1) {
750 
751  if((int)data==0)
752  begin_day++;
753 
754  else
755  begin_day--;
756 
757  if(begin_day <= 0) {
758 
759  begin_month--;
760  if(begin_month==0) {
761 
762  begin_year--;
763  begin_month=12;
764 
765  }
766 
768 
769  }
770 
771  else if(begin_day > mday[begin_month-1]) {
772 
773  begin_month++;
774 
775  if(begin_month > 12) {
776 
777  begin_year++;
778  begin_month=1;
779 
780  }
781 
782  begin_day=1;
783 
784  }
785 
786  }
787 
788 if(begin_day > mday[begin_month-1])
790 
791 sprintf(buf,"%d",begin_year);
792 
793 btn_text=XmStringCreateLocalized(buf);
794 
795 XtSetArg(args[0],XmNlabelString,btn_text);
796 XtSetValues(bdwidget[2],args,1);
797 
798 sprintf(buf,"%02d",begin_month);
799 
800 btn_text=XmStringCreateLocalized(buf);
801 
802 XtSetArg(args[0],XmNlabelString,btn_text);
803 XtSetValues(bdwidget[0],args,1);
804 
805 sprintf(buf,"%02d",begin_day);
806 
807 btn_text=XmStringCreateLocalized(buf);
808 
809 XtSetArg(args[0],XmNlabelString,btn_text);
810 XtSetValues(bdwidget[1],args,1);
811 
812 }
813 
814 void change_max_days(Widget w,XtPointer data,XtPointer junk)
815 
816 {
817 
818 
819 char buf[100];
820 XmString btn_text;
821 Arg args[10];
822 
823 if((int)data==0)
824  maxdays++;
825 
826 else
827  maxdays--;
828 
829 if(maxdays > 10)
830  maxdays=10;
831 
832 if(maxdays < 1)
833  maxdays=1;
834 
835 sprintf(buf,"%02d",maxdays);
836 
837 btn_text=XmStringCreateLocalized(buf);
838 
839 XtSetArg(args[0],XmNlabelString,btn_text);
840 XtSetValues(daywidget,args,1);
841 
842 }
843 
844 Widget
845 CreateMenuButton(char* name, Widget parent, XtCallbackProc callback,
846  XtPointer data, char mnemonic)
847 {
848  Widget button;
849  Arg args[2];
850  int n = 0;
851 
852  if (mnemonic != 0) {
853  XtSetArg(args[n], XmNmnemonic, mnemonic);
854  n++;
855  }
856 
857  button = XmCreatePushButtonGadget(parent, name, args, n);
858  XtManageChild(button);
859 
860  XtAddCallback(button, XmNactivateCallback, callback, data);
861  return(button);
862 }
863 
864 void test_menu() {
865 Arg args[10];
866 Widget rowcol;
867 Widget dirMenu, dirOM, simOM, widg;
868 int n, i;
869 static XmButtonType otypes[]={XmTITLE};
870 XmString olabels[1];
871 olabels[0]=XmStringCreateLocalized(" ");
872 
873 n=0;
874 start_dialog=XmCreateMessageDialog(drawing_area,"Map areas",args,n);
875 
876 n=0;
877 XtSetArg(args[n],XmNorientation,XmVERTICAL);n++;
878 rowcol=XmCreateRowColumn(start_dialog,"dummy",args,n);
879 
880  dirMenu = XmCreatePulldownMenu(drawing_area, "dirMenu", NULL, 0);
881  for(n = 0; n < 9; n++) {
882  char buffer[100];
883 
884  sprintf(buffer, "l%d", n);
885  CreateMenuButton(buffer, dirMenu, NULL, NULL, 0);
886  }
887  n = 0;
888  XtSetArg(args[n], XmNsubMenuId, dirMenu); n++;
889  dirOM = XmCreateOptionMenu(rowcol, "dirOM", args, n);
890  XtManageChild(dirOM);
891 
892 n=0;
893 
894 XtSetArg(args[n], XmNbuttonCount, 1); n++;
895 XtSetArg(args[n], XmNbuttons, olabels); n++;
896 XtSetArg(args[n], XmNbuttonType, otypes); n++;
897 simOM=XmCreateSimpleOptionMenu(rowcol,"simOM",args,n);
898 
899 XtSetArg(args[0],XmNsubMenuId,&widg);
900 XtGetValues(simOM,args,1);
901 
902 for(i=0;i<2;i++) {
903  char buffer[100];
904 
905  sprintf(buffer, "l%d", n);
906  XtVaCreateManagedWidget(buffer,xmPushButtonGadgetClass,widg,NULL);
907 }
908 XtManageChild(simOM);
909 XtManageChild(rowcol);
910 XtManageChild(start_dialog);
911 }
912 
914 
915 {
916 
917 
918 Arg args[10];
919 Cardinal argcount;
920 XmString str[10],t;
921 int number,i;
922 char *s[5];
923 Widget rowcol,pbutton,arrow1,arrow2,rowcol2,rowcol25;
924 char buf1[200],buf2[200],buf3[200];
925 struct tm *gmtim;
926 
927 t=XmStringCreateLocalized("Map areas");
928 
929 for(i=0;i<10;i++) {
930 
931  if(area_items[i].label==NULL)
932  break;
933 
934  str[i]=XmStringCreateLocalized(area_items[i].label);
935 
936  }
937 
938 number=i;
939 
940 argcount=0;
941 XtSetArg(args[argcount],XmNdialogStyle,
942  XmDIALOG_FULL_APPLICATION_MODAL);argcount++;
943 XtSetArg(args[argcount],XmNautoUnmanage,False);argcount++;
944 start_dialog=XmCreateMessageDialog(drawing_area,"Map areas",args,argcount);
945 
946 XtUnmanageChild(XmMessageBoxGetChild(start_dialog,XmDIALOG_HELP_BUTTON));
947 XtUnmanageChild(XmMessageBoxGetChild(start_dialog,XmDIALOG_SEPARATOR));
948 
949 argcount=0;
950 XtSetArg(args[argcount],XmNorientation,XmVERTICAL);argcount++;
951 rowcol=XmCreateRowColumn(start_dialog,"dummy",args,argcount);
952 
953 argcount=0;
954 XtSetArg(args[argcount],XmNorientation,XmHORIZONTAL);argcount++;
955 XtSetArg(args[argcount],XmNpacking,XmPACK_TIGHT); argcount++;
956 rowcol2=XmCreateRowColumn(rowcol,"Edit Stations",args,argcount);
957 
958 t=XmStringCreateLocalized("Ending Date");
959 argcount=0;
960 XtSetArg(args[argcount],XmNlabelString,t);argcount++;
961 pbutton=XmCreateLabel(rowcol2,"Label",args,argcount);
962 XtManageChild(pbutton);
963 XmStringFree(t);
964 
965 tim=time(NULL);
966 gmtim=gmtime(&tim);
967 
968 if(gmtim->tm_hour >= new_day_hour) {
969 
970  tim=tim+86400;
971 
972  gmtim=gmtime(&tim);
973 
974  }
975 
976 begin_year=gmtim->tm_year+1900;
977 begin_month=gmtim->tm_mon+1;
978 begin_day=gmtim->tm_mday;
979 
980 sprintf(buf1,"%02d",begin_year);
981 sprintf(buf2,"%02d",begin_month);
982 sprintf(buf3,"%02d",begin_day);
983 
984 s[0]=buf2;
985 s[1]=buf3;
986 s[2]=buf1;
987 
988 for(i=0;i<3;i++) {
989 
990  argcount=0;
991 
992  bdwidget[i]=XmCreatePushButton(rowcol2,s[i],args,argcount);
993  XtAddCallback(bdwidget[i],XmNactivateCallback,change_begin_color,
994  (XtPointer)i);
995 
996  XtManageChild(bdwidget[i]);
997 
998 }
999 
1000 argcount=0;
1001 XtSetArg(args[argcount],XmNarrowDirection,XmARROW_UP);argcount++;
1002 arrow1=XmCreateArrowButton(rowcol2,"up",args,argcount);
1003 XtAddCallback(arrow1,XmNactivateCallback,change_begin_date,(XtPointer)0);
1004 
1005 argcount=0;
1006 XtSetArg(args[argcount],XmNarrowDirection,XmARROW_DOWN);argcount++;
1007 arrow2=XmCreateArrowButton(rowcol2,"down",args,argcount);
1008 XtAddCallback(arrow2,XmNactivateCallback,change_begin_date,(XtPointer)1);
1009 
1010 XtManageChild(arrow1);
1011 XtManageChild(arrow2);
1012 
1013 argcount=0;
1014 XtSetArg(args[argcount],XmNorientation,XmHORIZONTAL);argcount++;
1015 XtSetArg(args[argcount],XmNpacking,XmPACK_TIGHT); argcount++;
1016 rowcol25=XmCreateRowColumn(rowcol,"Edit Stations",args,argcount);
1017 
1018 t=XmStringCreateLocalized("Total Days ");
1019 argcount=0;
1020 XtSetArg(args[argcount],XmNlabelString,t);argcount++;
1021 pbutton=XmCreateLabel(rowcol25,"Label",args,argcount);
1022 XtManageChild(pbutton);
1023 XmStringFree(t);
1024 
1025 sprintf(buf1,"%02d",maxdays);
1026 
1027 s[0]=buf1;
1028 
1029 argcount=0;
1030 
1031 daywidget=XmCreatePushButton(rowcol25,s[0],args,argcount);
1032 
1033 XtManageChild(daywidget);
1034 
1035 argcount=0;
1036 XtSetArg(args[argcount],XmNarrowDirection,XmARROW_UP);argcount++;
1037 arrow1=XmCreateArrowButton(rowcol25,"up",args,argcount);
1038 XtAddCallback(arrow1,XmNactivateCallback,change_max_days,(XtPointer)0);
1039 
1040 argcount=0;
1041 XtSetArg(args[argcount],XmNarrowDirection,XmARROW_DOWN);argcount++;
1042 arrow2=XmCreateArrowButton(rowcol25,"down",args,argcount);
1043 XtAddCallback(arrow2,XmNactivateCallback,change_max_days,(XtPointer)1);
1044 
1045 XtManageChild(arrow1);
1046 XtManageChild(arrow2);
1047 
1048 t=XmStringCreateLocalized("Map area");
1049 argcount=0;
1050 XtSetArg(args[argcount],XmNlabelString,t);argcount++;
1051 pbutton=XmCreateLabel(rowcol,"Label",args,argcount);
1052 XtManageChild(pbutton);
1053 XmStringFree(t);
1054 
1055 argcount=0;
1056 XtSetArg(args[argcount],XmNitemCount,number);argcount++;
1057 XtSetArg(args[argcount],XmNitems,str);argcount++;
1058 XtSetArg(args[argcount],XmNlistSizePolicy,XmCONSTANT);argcount++;
1059 XtSetArg(args[argcount],XmNvisibleItemCount,5);argcount++;
1060 XtSetArg(args[argcount],XmNselectionPolicy,XmSINGLE_SELECT);argcount++;
1061 area_menu=XmCreateScrolledList(rowcol,"areas",args,argcount);
1062 XtAddCallback(area_menu,XmNsingleSelectionCallback,save_selection2,NULL);
1063 
1064 XtManageChild(area_menu);
1065 XtManageChild(rowcol);
1066 
1067 XtManageChild(rowcol2);
1068 XtManageChild(rowcol25);
1069 XtManageChild(start_dialog);
1070 
1071 XtAddCallback(start_dialog,XmNokCallback,area_callback,NULL);
1072 XtAddCallback(start_dialog,XmNcancelCallback,quit_callback,NULL);
1073 
1074 for(i=0;i<number;i++)
1075  XmStringFree(str[i]);
1076 
1077 }
1078 
1079 
1080 void area_callback(Widget w,XtPointer client_data,XtPointer call_data)
1081 
1082  {
1083 
1084 char *value;
1085 int i;
1086 char tstring[1000];
1087 int argcount;
1088 Arg args[10];
1089 
1090 if(rec_found[0]==0)
1091  return;
1092 
1093 for(i=0;i<10;i++) {
1094  if(area_items[i].label==NULL)
1095  break;
1096 
1097  if(strcmp(rec_found,area_items[i].label)==0) {
1098 
1099  sprintf(tstring,"daily_qc 3.0 (%s)",rec_found);
1100  XtSetArg(args[0],XmNtitle,tstring);
1101  XtSetValues(top_level,args,1);
1102 
1103  XtDestroyWidget(start_dialog);
1104  XmUpdateDisplay(top_level);
1105  area_select(drawing_area,area_items[i].callback_data);
1106  return;
1107 
1108  }
1109 
1110 
1111 }
1112 
1113 }
1114 
1115 Widget BuildPulldownPushMenu(Widget parent,char *menu_title,char menu_mnemonic,struct MenuItem *items)
1116 
1117 
1118 {
1119 
1120  Widget Pulldown, button;
1121  int i;
1122  int argcount;
1123  Arg args[10];
1124 
1125  argcount=0;
1126 
1127  Pulldown=XmCreatePulldownMenu(parent,"pulldown",args,argcount);
1128 
1129  for(i=0;items[i].label!=NULL;i++) {
1130 
1131  button=XmCreatePushButton(Pulldown,items[i].label,args,argcount);
1132 
1133  XtAddCallback(button,XmNactivateCallback,items[i].callback,
1134  items[i].callback_data);
1135  XtManageChild(button);
1136 
1137  }
1138 
1139 return(Pulldown);
1140 
1141 }
1142 
1143 Widget BuildPulldownToggleMenu(Widget parent,char *menu_title,char
1144 menu_mnemonic,struct MenuItem *items)
1145 
1146 
1147 {
1148 
1149  Widget Pulldown, button;
1150  int i;
1151  int argcount;
1152  Arg args[10];
1153  int jj;
1154 
1155  argcount=0;
1156 
1157  Pulldown=XmCreatePulldownMenu(parent,"pulldown",args,argcount);
1158 
1159  jj=0;
1160  for(i=0;items[i].label!=NULL;i++) {
1161 
1162  argcount=0;
1163 
1164  XtSetArg(args[argcount],XmNselectColor,cmap[4]);argcount++;
1165 
1166  if(i==topo_number && add_topo_flag==1)
1167  XtSetArg(args[argcount],XmNset,True);
1168 
1169  else if(i==topo_number)
1170  XtSetArg(args[argcount],XmNset,False);
1171 
1172  else if(i==isoh_number && add_isohyet_flag==1)
1173  XtSetArg(args[argcount],XmNset,True);
1174 
1175  else if(i==isoh_number)
1176  XtSetArg(args[argcount],XmNset,False);
1177 
1178  else if(i==max_number && add_max_flag==1)
1179  XtSetArg(args[argcount],XmNset,True);
1180 
1181  else if(i==max_number)
1182  XtSetArg(args[argcount],XmNset,False);
1183 
1184  else if(off[jj]==1)
1185  XtSetArg(args[argcount],XmNset,True);
1186 
1187  else
1188  XtSetArg(args[argcount],XmNset,False);
1189 
1190  argcount++;
1191 
1192  mbutton[i]=XmCreateToggleButton(Pulldown,items[i].label,args,argcount);
1193 
1194  if(i==topo_number)
1196 
1197  if(i==isoh_number)
1199 
1200  if(i==fgbg_number)
1202 
1203  if(i==max_number)
1205 
1206  if(i==min_number)
1208 
1209  XtAddCallback(mbutton[i],XmNvalueChangedCallback,items[i].callback,items[i].callback_data);
1210 
1211  XtManageChild(mbutton[i]);
1212 
1213  if(i != topo_number && i != isoh_number \
1214  && i != max_number && i != min_number)
1215  jj++;
1216 
1217 
1218 
1219  }
1220 
1221  return(Pulldown);
1222 
1223 }
1224 
1225 Widget AttachToCascade(Widget parent, char *label,Widget sub_menu)
1226 
1227 {
1228 Arg args[10];
1229 Cardinal argcount;
1230 Widget cbutton;
1231 
1232 argcount=0;
1233 XtSetArg(args[argcount],XmNsubMenuId,sub_menu);argcount++;
1234 cbutton=XmCreateCascadeButton(parent,label,args,argcount);
1235 XtManageChild(cbutton);
1236 return(cbutton);
1237 
1238 }
1239 
1240 void Create_Colors(Display *pdisplay)
1241 
1242 
1243 {
1244 
1245 int scr=DefaultScreen(display);
1246 Colormap def_colormap=DefaultColormap(display,scr);
1247 Colormap new_colormap;
1248 int ncolors,i,nplanes,npixels,a=256,new_map;
1249 unsigned long pixels[90];
1250 unsigned long planemask;
1251 float mult[10];
1252 int x;
1253 
1254 /* Get total number of cells */
1255 
1256 ncolors=DisplayCells(display,scr);
1257 
1258 /* Initialize colors */
1259 
1260 for(i=0;i<ncolors;i++){
1261  colors[i].pixel=i;
1262  colors[i].flags=DoRed|DoGreen|DoBlue;
1263 }
1264 
1265 /* Set Up Screen Colors */
1266 
1267 colors[0].red= 0*a;colors[0].green= 0*a;colors[0].blue= 0*a;
1268 colors[1].red= 188*a;colors[1].green= 188*a;colors[1].blue= 188*a;
1269 colors[2].red= 188*a;colors[2].green= 152*a;colors[2].blue= 67*a;
1270 colors[3].red= 100*a;colors[3].green= 188*a;colors[3].blue= 20;
1271 colors[4].red= 0*a;colors[4].green= 255*a;colors[4].blue= 255*a;
1272 colors[5].red= 0*a;colors[5].green= 127*a;colors[5].blue= 255*a;
1273 colors[6].red= 0*a;colors[6].green= 255*a;colors[6].blue= 0*a;
1274 colors[7].red= 255*a;colors[7].green= 0*a;colors[7].blue= 0*a;
1275 colors[8].red= 188*a;colors[8].green= 188*a;colors[8].blue= 0*a;
1276 colors[9].red= 110*a;colors[9].green= 110*a;colors[9].blue= 110*a;
1277 colors[10].red= 0*a;colors[10].green=139*a;colors[10].blue= 0*a;
1278 colors[11].red= 0*a;colors[11].green=175*a;colors[11].blue=175*a;
1279 colors[12].red=255*a;colors[12].green= 0*a;colors[12].blue=255*a;
1280 colors[13].red=175*a;colors[13].green= 0*a;colors[13].blue=175*a;
1281 colors[14].red= 0*a;colors[14].green= 0*a;colors[14].blue=255*a;
1282 colors[15].red= 0*a;colors[15].green= 0*a;colors[15].blue=175*a;
1283 colors[16].red=255*a;colors[16].green=255*a;colors[16].blue= 0*a;
1284 colors[17].red= 0*a;colors[17].green=139*a;colors[17].blue=139*a;
1285 colors[18].red=255*a;colors[18].green=156*a;colors[18].blue= 0*a;
1286 colors[19].red=175*a;colors[19].green= 0*a;colors[19].blue= 0*a;
1287 colors[20].red=255*a;colors[20].green=255*a;colors[20].blue=255*a;
1288 
1289 colors[56].red=130*a;colors[56].green=130*a;colors[56].blue= 0*a;
1290 /*colors[57].red=114*a;colors[57].green=159*a;colors[57].blue=255*a;*/
1291 colors[57].red=114*a;colors[57].green=114*a;colors[57].blue=114*a;
1292 colors[58].red=255*a;colors[58].green=120*a;colors[58].blue=120*a;
1293 
1294 colors[59].red=235*a;colors[59].green=0*a;colors[59].blue=0*a;
1295 colors[60].red=215*a;colors[60].green=0*a;colors[60].blue=0*a;
1296 colors[61].red=195*a;colors[61].green=0*a;colors[61].blue=0*a;
1297 colors[62].red=175*a;colors[62].green=0*a;colors[62].blue=0*a;
1298 colors[63].red=155*a;colors[63].green=0*a;colors[63].blue=0*a;
1299 colors[64].red=135*a;colors[64].green=0*a;colors[64].blue=0*a;
1300 
1301 colors[71].red=215*a;colors[71].green=95*a;colors[71].blue=238*a;
1302 /*
1303 colors[70].red=0*a;colors[70].green=235*a;colors[70].blue=0*a;
1304 colors[69].red=0*a;colors[69].green=215*a;colors[69].blue=0*a;
1305 colors[68].red=0*a;colors[68].green=195*a;colors[68].blue=0*a;
1306 colors[67].red=0*a;colors[67].green=175*a;colors[67].blue=0*a;
1307 colors[66].red=0*a;colors[66].green=155*a;colors[66].blue=0*a;
1308 colors[65].red=0*a;colors[65].green=135*a;colors[65].blue=0*a;
1309 
1310 colors[77].red=0*a;colors[77].green=255*a;colors[77].blue=255*a;
1311 colors[76].red=0*a;colors[76].green=215*a;colors[76].blue=215*a;
1312 colors[75].red=0*a;colors[75].green=175*a;colors[75].blue=175*a;
1313 colors[74].red=0*a;colors[74].green=135*a;colors[74].blue=135*a;
1314 colors[73].red=0*a;colors[73].green= 95*a;colors[73].blue= 95*a;
1315 colors[72].red=0*a;colors[72].green= 55*a;colors[72].blue= 55*a;
1316 
1317 colors[78].red=0*a;colors[78].green= 95*a;colors[78].blue=0*a;
1318 colors[79].red=0*a;colors[79].green= 55*a;colors[79].blue=0*a;
1319 */
1320 
1321 
1322 colors[76].red= 0*a;colors[76].green= 0*a;colors[76].blue=255*a;
1323 colors[75].red= 0*a;colors[75].green=135*a;colors[75].blue=255*a;
1324 colors[74].red= 0*a;colors[74].green=255*a;colors[74].blue=255*a;
1325 colors[73].red= 0*a;colors[73].green=175*a;colors[73].blue=175*a;
1326 colors[72].red= 0*a;colors[72].green=135*a;colors[72].blue=135*a;
1327 
1328 colors[77].red= 0*a;colors[77].green=255*a;colors[77].blue=0*a;
1329 colors[78].red= 0*a;colors[78].green=205*a;colors[78].blue=0*a;
1330 colors[79].red= 0*a;colors[79].green=165*a;colors[79].blue=0*a;
1331 colors[80].red= 0*a;colors[80].green=125*a;colors[80].blue=0*a;
1332 colors[81].red=255*a;colors[81].green=255*a;colors[81].blue=0*a;
1333 
1334 colors[24].red=130*a;colors[24].green=130*a;colors[24].blue=130*a;
1335 colors[31].red=130*a;colors[31].green=115*a;colors[31].blue= 90*a;
1336 colors[38].red=130*a;colors[38].green= 90*a;colors[38].blue= 65*a;
1337 colors[45].red=130*a;colors[45].green=130*a;colors[45].blue= 65*a;
1338 colors[52].red= 0*a;colors[52].green=130*a;colors[52].blue= 0*a;
1339 
1340 mult[0]=.550;
1341 mult[1]=.70;
1342 mult[2]=.85;
1343 mult[3]=1.00;
1344 mult[4]=1.15;
1345 mult[5]=1.30;
1346 mult[6]=1.45;
1347 
1348 for(i=0;i<7;i++) {
1349 
1350  x=i-3;
1351 
1352  colors[24+x].red=mult[i]*colors[24].red;
1353  colors[24+x].green=mult[i]*colors[24].green;
1354  colors[24+x].blue=mult[i]*colors[24].blue;
1355 
1356  colors[31+x].red=mult[i]*colors[31].red;
1357  colors[31+x].green=mult[i]*colors[31].green;
1358  colors[31+x].blue=mult[i]*colors[31].blue;
1359 
1360  colors[38+x].red=mult[i]*colors[38].red;
1361  colors[38+x].green=mult[i]*colors[38].green;
1362  colors[38+x].blue=mult[i]*colors[38].blue;
1363 
1364  colors[45+x].red=mult[i]*colors[45].red;
1365  colors[45+x].green=mult[i]*colors[45].green;
1366  colors[45+x].blue=mult[i]*colors[45].blue;
1367 
1368  colors[52+x].red=mult[i]*colors[52].red;
1369  colors[52+x].green=mult[i]*colors[52].green;
1370  colors[52+x].blue=mult[i]*colors[52].blue;
1371 
1372  }
1373 
1374 allocate_colors(82);
1375 
1376 cmap[0]=colors[0].pixel;
1377 cmap[8]=colors[1].pixel;
1378 cmap[6]=colors[2].pixel;
1379 cmap[12]=colors[3].pixel;
1380 cmap[2]=colors[4].pixel;
1381 cmap[10]=colors[5].pixel;
1382 cmap[14]=colors[6].pixel;
1383 cmap[4]=colors[7].pixel;
1384 cmap[1]=colors[20].pixel;
1385 cmap[3]=colors[11].pixel;
1386 cmap[5]=colors[20].pixel;
1387 cmap[7]=colors[16].pixel;
1388 cmap[9]=colors[56].pixel;
1389 
1390 nmap[0]=colors[1].pixel;
1391 nmap[1]=colors[9].pixel;
1392 nmap[2]=colors[17].pixel;
1393 nmap[3]=colors[11].pixel;
1394 nmap[4]=colors[6].pixel;
1395 nmap[5]=colors[10].pixel;
1396 nmap[6]=colors[12].pixel;
1397 nmap[7]=colors[13].pixel;
1398 nmap[8]=colors[14].pixel;
1399 nmap[9]=colors[15].pixel;
1400 
1401 rmap[0]=colors[77].pixel;
1402 rmap[1]=colors[78].pixel;
1403 rmap[2]=colors[79].pixel;
1404 rmap[3]=colors[80].pixel;
1405 rmap[4]=colors[81].pixel;
1406 rmap[5]=colors[72].pixel;
1407 rmap[6]=colors[73].pixel;
1408 rmap[7]=colors[74].pixel;
1409 rmap[8]=colors[75].pixel;
1410 rmap[9]=colors[76].pixel;
1411 
1412 nmap[10]=colors[8].pixel;
1413 nmap[11]=colors[16].pixel;
1414 nmap[12]=colors[18].pixel;
1415 nmap[13]=colors[7].pixel;
1416 nmap[14]=colors[19].pixel;
1417 nmap[15]=colors[20].pixel;
1418 
1419 for(i=0;i<16;i++) {
1420 
1421  qmap[i]=nmap[i];
1422  imap[i]=nmap[i];
1423  xmap[i]=nmap[i];
1424  mnmap[i]=nmap[i];
1425 
1426  }
1427 
1428 tmap[0]=colors[21].pixel;
1429 tmap[1]=colors[22].pixel;
1430 tmap[2]=colors[23].pixel;
1431 tmap[3]=colors[24].pixel;
1432 tmap[4]=colors[25].pixel;
1433 tmap[5]=colors[26].pixel;
1434 tmap[6]=colors[27].pixel;
1435 
1436 tmap[7]=colors[28].pixel;
1437 tmap[8]=colors[29].pixel;
1438 tmap[9]=colors[30].pixel;
1439 tmap[10]=colors[31].pixel;
1440 tmap[11]=colors[32].pixel;
1441 tmap[12]=colors[33].pixel;
1442 tmap[13]=colors[34].pixel;
1443 
1444 tmap[14]=colors[35].pixel;
1445 tmap[15]=colors[36].pixel;
1446 tmap[16]=colors[37].pixel;
1447 tmap[17]=colors[38].pixel;
1448 tmap[18]=colors[39].pixel;
1449 tmap[19]=colors[40].pixel;
1450 tmap[20]=colors[41].pixel;
1451 
1452 tmap[21]=colors[42].pixel;
1453 tmap[22]=colors[43].pixel;
1454 tmap[23]=colors[44].pixel;
1455 tmap[24]=colors[45].pixel;
1456 tmap[25]=colors[46].pixel;
1457 tmap[26]=colors[47].pixel;
1458 tmap[27]=colors[48].pixel;
1459 
1460 tmap[28]=colors[49].pixel;
1461 tmap[29]=colors[50].pixel;
1462 tmap[30]=colors[51].pixel;
1463 tmap[31]=colors[52].pixel;
1464 tmap[32]=colors[53].pixel;
1465 tmap[33]=colors[54].pixel;
1466 tmap[34]=colors[55].pixel;
1467 
1468 dmap[0]=colors[7].pixel;
1469 dmap[1]=colors[59].pixel;
1470 dmap[2]=colors[60].pixel;
1471 dmap[3]=colors[61].pixel;
1472 dmap[4]=colors[62].pixel;
1473 dmap[5]=colors[63].pixel;
1474 dmap[6]=colors[64].pixel;
1475 dmap[7]=colors[0].pixel;
1476 dmap[8]=colors[65].pixel;
1477 dmap[9]=colors[66].pixel;
1478 dmap[10]=colors[67].pixel;
1479 dmap[11]=colors[68].pixel;
1480 dmap[12]=colors[69].pixel;
1481 dmap[13]=colors[70].pixel;
1482 dmap[14]=colors[6].pixel;
1483 dmap[15]=colors[6].pixel;
1484 
1485 
1486 for(i=0;i<44;i++)
1487  vmap[i]=tmap[i];
1488 
1489 zmap[0]=colors[6].pixel;
1490 zmap[1]=colors[4].pixel;
1491 zmap[2]=colors[16].pixel;
1492 zmap[3]=colors[12].pixel;
1493 zmap[4]=colors[6].pixel;
1494 zmap[5]=colors[4].pixel;
1495 zmap[6]=colors[16].pixel;
1496 zmap[7]=colors[12].pixel;
1497 
1498 mmap[0]=colors[0].pixel;
1499 mmap[1]=colors[57].pixel;
1500 mmap[4]=colors[7].pixel;
1501 mmap[2]=colors[1].pixel;
1502 mmap[3]=colors[20].pixel;
1503 mmap[5]=colors[16].pixel;
1504 mmap[6]=colors[67].pixel;
1505 mmap[7]=colors[4].pixel;
1506 
1507 mmap[8]=colors[71].pixel;
1508 mmap[9]=colors[18].pixel;
1509 mmap[10]=colors[6].pixel;
1510 mmap[11]=colors[16].pixel;
1511 
1512 amap[8]=colors[20].pixel;
1513 amap[1]=colors[58].pixel;
1514 amap[2]=colors[18].pixel;
1515 amap[3]=colors[16].pixel;
1516 amap[4]=colors[12].pixel;
1517 amap[5]=colors[6].pixel;
1518 amap[6]=colors[10].pixel;
1519 amap[7]=colors[1].pixel;
1520 amap[0]=colors[4].pixel;
1521 
1522 return;
1523 
1524 }
1525 
1526 void allocate_colors(int maxcolors)
1527 
1528 {
1529 
1530 
1531 int j;
1532 XColor exact_def;
1533 XColor color;
1534 int scr=DefaultScreen(display);
1535 Colormap def_colormap=DefaultColormap(display,scr);
1536 Colormap new_colormap;
1537 int ncolors,i,nplanes,npixels;
1538 unsigned long planemask;
1539 unsigned long pixels[70];
1540 int fval[3];
1541 int m;
1542 
1543 for (j=0;j<maxcolors;j++) {
1544 
1545  exact_def.red=colors[j].red;
1546  exact_def.blue=colors[j].blue;
1547  exact_def.green=colors[j].green;
1548 
1549  if(!XAllocColor(display,def_colormap,&exact_def)){
1550 
1551  printf("could not allocate\n");
1552 
1553  return;
1554 
1555  }
1556 
1557  fval[0]=abs(exact_def.red - colors[j].red);
1558  fval[1]=abs(exact_def.blue - colors[j].blue);
1559  fval[2]=abs(exact_def.green - colors[j].green);
1560 
1561  if(fval[0] > 500 || fval[1] > 500 || fval[2] > 500) {
1562 
1563  printf("allocating %d %d %d %d %d %d %d %d %d %d\n",
1564  j,fval[0],fval[1],fval[2],exact_def.red,colors[j].red,
1565  exact_def.blue,colors[j].blue,
1566  exact_def.green,colors[j].green);
1567 
1568  nplanes=0;
1569  npixels=1;
1570 
1571  if(!XAllocColorCells(display,def_colormap,FALSE,&planemask,nplanes,
1572  pixels,npixels)) {
1573 
1574  printf("could not allocate\n");
1575  return;
1576 
1577  }
1578 
1579  color.red=colors[j].red;
1580  color.blue=colors[j].blue;
1581  color.green=colors[j].green;
1582 
1583  color.pixel=pixels[0];
1584  colors[j].pixel=pixels[0];
1585  color.flags=DoRed|DoGreen|DoBlue;
1586 
1587  XStoreColor(display,def_colormap,&color);
1588 
1589 
1590 
1591  }
1592 
1593  else {
1594 
1595  colors[j].pixel=exact_def.pixel;
1596 
1597 
1598 
1599 
1600  }
1601 
1602  }
1603 
1604 }
1605 
1606 
1607 void clear_drawable(Drawable pixw)
1608 
1609 {
1610 
1611 Dimension width,height;
1612 
1613 XSetFunction(display,gc,GXcopy);
1614 XSetForeground(display,gc,mmap[0]);
1615 XSetBackground(display,gc,mmap[0]);
1616 width=max_width;
1617 height=max_height;
1618 
1619 XFillRectangle(display,pixw,gc,0,0,max_width,max_height);
1620 
1621 }
1622 
1624 
1625 {
1626 
1627 Dimension width,height;
1628 Arg args[10];
1629 signed long XSIZE,YSIZE,xsize,ysize,xbegin,ybegin;
1630 int h,time_pos;
1631 char tbuf[1000],mbuf[1000];
1632 time_t ltime;
1633 struct tm *gm;
1634 int yheight;
1635 int ymax;
1636 
1637 XtSetArg(args[0],XtNwidth,&width);
1638 XtSetArg(args[1],XtNheight,&height);
1639 XtGetValues(drawing_area,args,2);
1640 
1641 XSIZE=(long)width*10L;;
1642 YSIZE=(long)height*10L;
1643 
1644 display_set[0].dmult[0]=1.0;
1645 display_set[0].xmin[0]=0;
1646 display_set[0].ymin[0]=0;
1647 display_set[0].xmax[0]=XSIZE;
1648 display_set[0].ymax[0]=YSIZE;
1649 display_set[0].xcen[0]=XSIZE/2;
1650 display_set[0].ycen[0]=YSIZE/2;
1651 display_set[0].xoff[0]=0;
1652 display_set[0].yoff[0]=0;
1653 
1654 display_set[3].dmult[0]=0.5;
1655 display_set[3].dmult[1]=0.5;
1656 display_set[3].dmult[2]=0.5;
1657 display_set[3].dmult[3]=0.5;
1658 
1659 for(h=0;h<4;h++) {
1660 
1661  display_set[3].xmin[h]=0;
1662  display_set[3].ymin[h]=0;
1663  display_set[3].xmax[h]=XSIZE/2-xclip*10;
1664  display_set[3].ymax[h]=YSIZE/2-yclip*10;
1665  display_set[3].xcen[h]=XSIZE/4;
1666 
1667  display_set[3].ycen[h]=YSIZE/4;
1668 
1669 
1670  }
1671 
1672 display_set[3].xoff[0]=0;
1673 display_set[3].yoff[0]=0;
1674 
1675 display_set[3].xoff[1]=XSIZE/2+xclip*10;
1676 display_set[3].yoff[1]=0;
1677 
1678 display_set[3].xoff[2]=0;
1679 display_set[3].yoff[2]=YSIZE/2+yclip*10;
1680 
1681 display_set[3].xoff[3]=XSIZE/2+xclip*10;
1682 display_set[3].yoff[3]=YSIZE/2+yclip*10;
1683 
1684 
1685 
1686 ymax= display_set[0].ymax[0];
1687 
1688 XSetFunction(display,gc,GXcopy);
1689 
1690 XDefineCursor(display,window,watch_cursor);
1691 
1692 XmUpdateDisplay(top_level);
1693 
1694 
1696 
1697 h=0;
1698 
1699 /*create background pixmap */
1700 
1701 
1702 if(add_isohyet_flag==1 && isom != old_isom) {
1703 
1704  old_isom=isom;
1705  change_map_flag=1;
1706 
1707  }
1708 
1709 if(change_map_flag==1) {
1710 
1712 
1713  if(add_topo_flag==1) {
1714 
1715  if(contour_topo_flag==-1)
1717 
1718  else
1720 
1721  change_map_flag=0;
1722 
1723 
1724  }
1725 
1726  if(add_isohyet_flag==1) {
1727 
1728  if(contour_pcp_flag==-1)
1730 
1731  else
1733 
1734  change_map_flag=0;
1735 
1736  }
1737 
1738  if(add_max_flag==1) {
1739 
1740  if(contour_maxmin_flag==-1)
1741  plot_maxmin(isom,pixb,h,display_flag,0);
1742 
1743  else
1744  contour_maxmin(isom,pixb,h,display_flag,0);
1745 
1746  change_map_flag=0;
1747 
1748  }
1749 
1750  if(add_min_flag==1) {
1751 
1752  if(contour_maxmin_flag==-1)
1753  plot_maxmin(isom,pixb,h,display_flag,1);
1754 
1755  else
1756  contour_maxmin(isom,pixb,h,display_flag,1);
1757 
1758  change_map_flag=0;
1759 
1760  }
1761  }
1762 
1763 for(h=0;h < display_flag+1;h++) {
1764 
1765  if(fgbgflag==-1)
1767 
1768  xsize=display_set[display_flag].xmax[h]-
1770  ysize=display_set[display_flag].ymax[h]-
1772 
1773  xbegin=display_set[display_flag].xoff[h];
1774  ybegin=display_set[display_flag].yoff[h];
1775 
1776 /* copy raster backgrounds*/
1777 
1778  if(add_topo_flag==1 || add_isohyet_flag==1 ||
1779  add_max_flag==1 || add_min_flag==1)
1780 
1781  XCopyArea(display,pixb,pixm,gc,0,0,xsize/10,ysize/10,0,0);
1782 
1783 /* maps background */
1784 
1785  if(fgbgflag==-1)
1787 
1788 
1789 /* precipitation MAPS */
1790 
1791 
1792  if(qpf_on==1) {
1793 
1794  if(map_flag==1) {
1795 
1796  if(pcpn_time_step==0)
1797  time_pos=pcp_flag;
1798 
1799  else
1800  time_pos=40+pcpn_day;
1801 
1802  plot_map(pixm,h,display_flag,time_pos);
1803 
1804  }
1805 
1806 /* gridded precipitation */
1807 
1808  if(grids_flag==1) {
1809 
1810  if(pcpn_time_step==0)
1811  time_pos=pcp_flag;
1812 
1813  else
1814  time_pos=40+pcpn_day;
1815 
1816 
1817  if(contour_pcp_flag==1)
1819  "pcp",time_pos);
1820 
1821  else
1823  "pcp",time_pos,100);
1824 
1825  }
1826 
1827 /* NEXRAD data */
1828 
1829  if(dflag[0]==1) {
1830 
1831  if(pcpn_time_step==0)
1832  time_pos=50+pcp_flag;
1833 
1834  else
1835  time_pos=90+pcpn_day;
1836 
1837  if(contour_pcp_flag==1)
1839  "pcp",time_pos);
1840 
1841  else
1843  "pcp",time_pos,100);
1844 
1845  }
1846 
1847  if(plot_view > 0 && points_flag==1)
1849 
1850  }
1851 
1852  else if(flf_on==1) {
1853 
1854  if(map_flag==1) {
1855 
1856  time_pos=100+pcp_flag;
1857 
1858  plot_rsel(pixm,h,display_flag,time_pos);
1859 
1860  }
1861 
1862  if(grids_flag==1) {
1863 
1864  time_pos=100+pcp_flag;
1865 
1866  if(contour_pcp_flag==1)
1867  contour_frz(pixm,h,display_flag,
1868  "pcp",time_pos);
1869 
1870  else
1871  plot_frz(pixm,h,display_flag,
1872  "pcp",time_pos);
1873 
1874  }
1875 
1876  if(plot_view > 0 && points_flag==1)
1878 
1879 
1880  }
1881 
1882  else if(maxmin_on==1) {
1883 
1884  if(map_flag==1 && pcpn_time_step==0) {
1885 
1886  time_pos=150+pcp_flag;
1887 
1888  plot_mat(pixm,h,display_flag,time_pos);
1889 
1890  }
1891 
1892  if(grids_flag==1) {
1893 
1894  if(pcpn_time_step==0)
1895  time_pos=150+pcp_flag;
1896 
1897  else if(pcpn_time_step==1)
1898  time_pos=190+pcpn_day;
1899 
1900  else if(pcpn_time_step==2)
1901  time_pos=200+pcpn_day;
1902 
1903  if(contour_maxmin_flag==1)
1904  contour_mxn(pixm,h,display_flag,
1905  "pcp",time_pos);
1906 
1907 
1908  else
1909  plot_mxn(pixm,h,display_flag,
1910  "pcp",time_pos);
1911 
1912  }
1913 
1914  if(plot_view > 0 && points_flag==1)
1916 
1917 
1918  }
1919 
1920 
1921  /* map backgrounds foreground */
1922 
1923  if(fgbgflag==1)
1925 
1926  }
1927 
1928 if(qpf_on==1) {
1929 
1930 if(pcpn_time_step==0)
1931  time_pos=pcpn_time;
1932 
1933 else
1934  time_pos=4;
1935 
1936 if(pcpn_time < 2 && pcpn_time_step==0)
1937  ltime=pdata[pcpn_day].data_time - 24L*3600L;
1938 
1939 else
1940  ltime=pdata[pcpn_day].data_time;
1941 
1942 gm=gmttime(&ltime);
1943 
1944 sprintf(tbuf,"Precipitation ");
1945 
1946 if(points_flag==1 && grids_flag==-1 && map_flag==-1)
1947  strcpy(mbuf,"Points ");
1948 
1949 else if(points_flag==-1 && grids_flag==1 && map_flag==-1)
1950  strcpy(mbuf,"Grids ");
1951 
1952 else if(points_flag==-1 && grids_flag==-1 && map_flag==1)
1953  strcpy(mbuf,"MAPs ");
1954 
1955 else if(points_flag==1 && grids_flag==1 && map_flag==-1)
1956  strcpy(mbuf,"Points+Grids ");
1957 
1958 else if(points_flag==1 && grids_flag==-1 && map_flag==1)
1959  strcpy(mbuf,"Points+MAPs ");
1960 
1961 else if(points_flag==-1 && grids_flag==-1 && map_flag==-1)
1962  strcpy(mbuf," ");
1963 
1964 strcat(tbuf,mbuf);
1965 
1966 sprintf(mbuf,"%02d-%02d-%02d",gm->tm_mon+1,gm->tm_mday,gm->tm_year);
1967 
1968 strcat(tbuf,mbuf);
1969 
1970 if(pcpn_time_step==0) {
1971 
1972  if(pcpn_time==3)
1973  strcat(tbuf," 06z-12z");
1974  else if(pcpn_time==2)
1975  strcat(tbuf," 00z-06z");
1976  else if(pcpn_time==1)
1977  strcat(tbuf," 18z-00z");
1978  else if(pcpn_time==0)
1979  strcat(tbuf," 12z-18z");
1980  }
1981 
1982 else
1983  strcat(tbuf," ending at 12z");
1984 
1985 XSetForeground(display,gc,qmap[15]);
1986 XSetBackground(display,gc,0);
1987 
1988 if(pdata[pcpn_day].level==1)
1989  strcat(tbuf," - Level 1");
1990 
1991 else if(pdata[pcpn_day].level==2)
1992  strcat(tbuf," - Level 2");
1993 
1994 
1995 if(pdata[pcpn_day].used[time_pos]==4)
1996  strcat(tbuf," Saved");
1997 
1998 
1999 else if(pdata[pcpn_day].used[time_pos]==3 ||
2000  pdata[pcpn_day].used[time_pos]==2)
2001  strcat(tbuf," Modified");
2002 
2003 else if(pdata[pcpn_day].used[time_pos]==1)
2004  strcat(tbuf," Not Modified");
2005 
2006 else
2007  strcat(tbuf," - No Data");
2008 
2009 XSetFont(display,gc,font[2]);
2010 
2011 yheight=info_font[2]->ascent;
2012 
2013 XDrawString(display,pixm,gc,35,ymax/10-yheight,
2014  tbuf,strlen(tbuf));
2015 
2016 }
2017 
2018 else if(flf_on==1) {
2019 
2020 time_pos=pcpn_time;
2021 
2022 if(pcpn_time < 2)
2023  ltime=zdata[pcpn_day].data_time - 24L*3600L;
2024 
2025 else
2026  ltime=zdata[pcpn_day].data_time;
2027 
2028 gm=gmttime(&ltime);
2029 
2030 sprintf(tbuf,"Freezing Level ");
2031 
2032 if(points_flag==1 && grids_flag==-1 && map_flag==-1)
2033  strcpy(mbuf,"Points ");
2034 
2035 else if(points_flag==-1 && grids_flag==1 && map_flag==-1)
2036  strcpy(mbuf,"Grids ");
2037 
2038 else if(points_flag==-1 && grids_flag==-1 && map_flag==1)
2039  strcpy(mbuf,"MAZs ");
2040 
2041 else if(points_flag==1 && grids_flag==1 && map_flag==-1)
2042  strcpy(mbuf,"Points+Grids ");
2043 
2044 else if(points_flag==1 && grids_flag==-1 && map_flag==1)
2045  strcpy(mbuf,"Points+MAZs ");
2046 
2047 else if(points_flag==-1 && grids_flag==-1 && map_flag==-1)
2048  strcpy(mbuf," ");
2049 
2050 strcat(tbuf,mbuf);
2051 
2052 sprintf(mbuf,"%02d-%02d-%02d",gm->tm_mon+1,gm->tm_mday,gm->tm_year);
2053 
2054 strcat(tbuf,mbuf);
2055 
2056 if(pcpn_time==3)
2057  strcat(tbuf," 06z");
2058 else if(pcpn_time==2)
2059  strcat(tbuf," 00z");
2060 else if(pcpn_time==1)
2061  strcat(tbuf," 18z");
2062 else if(pcpn_time==0)
2063  strcat(tbuf," 12z");
2064 
2065 XSetForeground(display,gc,qmap[15]);
2066 XSetBackground(display,gc,0);
2067 
2068 if(zdata[pcpn_day].level[pcpn_time]==1)
2069  strcat(tbuf," - Level 1");
2070 
2071 else if(zdata[pcpn_day].level[pcpn_time]==2)
2072  strcat(tbuf," - Level 2");
2073 
2074 
2075 if(zdata[pcpn_day].used[time_pos]==6)
2076  strcat(tbuf," Calculated");
2077 
2078 
2079 else if(zdata[pcpn_day].used[time_pos]==4)
2080  strcat(tbuf," Saved");
2081 
2082 
2083 else if(zdata[pcpn_day].used[time_pos]==3 ||
2084  zdata[pcpn_day].used[time_pos]==2)
2085  strcat(tbuf," Modified");
2086 
2087 else if(zdata[pcpn_day].used[time_pos]==1)
2088  strcat(tbuf," Not Modified");
2089 
2090 else
2091  strcat(tbuf," - No Data");
2092 
2093 XSetFont(display,gc,font[2]);
2094 
2095 yheight=info_font[2]->ascent;
2096 
2097 XDrawString(display,pixm,gc,35,ymax/10-yheight,
2098  tbuf,strlen(tbuf));
2099 
2100 }
2101 
2102 else if(maxmin_on==1) {
2103 
2104 if(pcpn_time_step==0)
2105  time_pos=pcpn_time;
2106 
2107 else if(pcpn_time_step==1)
2108  time_pos=4;
2109 
2110 else if(pcpn_time_step==2)
2111  time_pos=5;
2112 
2113 if(pcpn_time < 2 && pcpn_time_step==0)
2114  ltime=tdata[pcpn_day].data_time - 24L*3600L;
2115 
2116 else
2117  ltime=tdata[pcpn_day].data_time;
2118 
2119 gm=gmttime(&ltime);
2120 
2121 if(pcpn_time_step==1)
2122  sprintf(tbuf,"Maximum Temperature ");
2123 
2124 else if(pcpn_time_step==2)
2125  sprintf(tbuf,"Minimum Temperature ");
2126 
2127 else
2128  sprintf(tbuf,"Temperature ");
2129 
2130 if(points_flag==1 && grids_flag==-1 && map_flag==-1)
2131  strcpy(mbuf,"Points ");
2132 
2133 else if(points_flag==-1 && grids_flag==1 && map_flag==-1)
2134  strcpy(mbuf,"Grids ");
2135 
2136 else if(points_flag==-1 && grids_flag==-1 && map_flag==1)
2137  strcpy(mbuf,"MATs ");
2138 
2139 else if(points_flag==1 && grids_flag==1 && map_flag==-1)
2140  strcpy(mbuf,"Points+Grids ");
2141 
2142 else if(points_flag==1 && grids_flag==-1 && map_flag==1)
2143  strcpy(mbuf,"Points+MATs ");
2144 
2145 else if(points_flag==-1 && grids_flag==-1 && map_flag==-1)
2146  strcpy(mbuf," ");
2147 
2148 strcat(tbuf,mbuf);
2149 
2150 sprintf(mbuf,"%02d-%02d-%02d",gm->tm_mon+1,gm->tm_mday,gm->tm_year);
2151 
2152 strcat(tbuf,mbuf);
2153 
2154 if(pcpn_time_step==0) {
2155 
2156  if(pcpn_time==3)
2157  strcat(tbuf," 06z");
2158  else if(pcpn_time==2)
2159  strcat(tbuf," 00z");
2160  else if(pcpn_time==1)
2161  strcat(tbuf," 18z");
2162  else if(pcpn_time==0)
2163  strcat(tbuf," 12z");
2164  }
2165 
2166 else
2167  strcat(tbuf," ending at 12z");
2168 
2169 XSetForeground(display,gc,qmap[15]);
2170 XSetBackground(display,gc,0);
2171 
2172 if(tdata[pcpn_day].level[pcpn_time]==1)
2173  strcat(tbuf," - Level 1");
2174 
2175 else if(tdata[pcpn_day].level[pcpn_time]==2)
2176  strcat(tbuf," - Level 2");
2177 
2178 if(tdata[pcpn_day].used[time_pos]==4)
2179  strcat(tbuf," Saved");
2180 
2181 else if(tdata[pcpn_day].used[time_pos]==3 ||
2182  tdata[pcpn_day].used[time_pos]==2)
2183  strcat(tbuf," Modified");
2184 
2185 else if(tdata[pcpn_day].used[time_pos]==1)
2186  strcat(tbuf," Not Modified");
2187 
2188 else
2189  strcat(tbuf," - No Data");
2190 
2191 XSetFont(display,gc,font[2]);
2192 
2193 yheight=info_font[2]->ascent;
2194 
2195 XDrawString(display,pixm,gc,35,ymax/10-yheight,
2196  tbuf,strlen(tbuf));
2197 
2198 }
2199 
2200 XSetForeground(display,gc,nmap[15]);
2201 
2202 XSetFunction(display,gc,GXcopy);
2203 
2204 if(change_topo_flag==1)
2206 /*
2207 else if(change_isohyet_flag==1)
2208  redraw_isohyet_legend(pixm);
2209 */
2210 else if(change_pcpn_flag==1)
2212 
2213 else if(change_diff_flag==1)
2214  redraw_diff_legend(pixm);
2215 
2216 else if(change_frz_flag==1)
2217  redraw_frz_legend(pixm);
2218 
2219 else if(change_rpcpn_flag==1)
2220  redraw_rpcpn_legend(pixm);
2221 
2222 else if(change_maxmin_flag==1)
2223  redraw_maxmin_legend(pixm);
2224 
2225 else if(first_through != 0)
2227 
2228 XCopyArea(display,pixm,window,gc,0,0,xsize/10,ysize/10,xbegin/10,ybegin/10);
2229 
2230 XUndefineCursor(display,window);
2231 
2232 XDefineCursor(display,window,dotbox_cursor);
2233 
2234 
2235 }
2236 
2237 
2238 
2239 void change_method(Widget w, XtPointer data,XmDrawingAreaCallbackStruct *call_data)
2240 
2241 {
2242 
2243 method=(int)data;
2244 
2245 }
2246 
2247 void area_select(Widget w,XtPointer data)
2248 
2249 {
2250 
2251 Cardinal argcount;
2252 Arg args[20];
2253 Widget dialog,rowcol,pbutton;
2254 Widget jwidget;
2255 XmString text;
2256 struct MenuItem items[50];
2257 Widget main_bar;
2258 int slider_size,scrollm,ivalue,increment,page_increment,ier;
2259 FILE *fr,*fp;
2260 char *q,*p, ibuf[2000],dbuf[2000],ebuf[2000];
2261 struct tm *gmtim;
2262 int m,mer;
2263 char
2264 preca[2000],precb[2000],precc[2000],precd[2000],prece[2000],buf[2000],databuf[2000];
2265 char zpointa[2000],zpointb[2000],tpointa[2000],tpointb[2000],tpointc[2000],tpointd[2000];
2266 time_t tget;
2267 struct tm *gm;
2268 int k,kk,mk,num;
2269 time_t sget;
2270 int i;
2271 int l;
2272 int ter,zer;
2273 
2274 XDefineCursor(display,window,watch_cursor);
2275 XmUpdateDisplay(top_level);
2276 
2277 argcount=0;
2278 XtSetArg(args[argcount],XmNwidth, 774);argcount++;
2279 XtSetArg(args[argcount],XmNheight, 30);argcount++;
2280 menu_bar=XmCreateMenuBar(main_window,"Menubar",args,argcount);
2281 text=XmStringCreateLocalized("Reading Map and Precipitation Data");
2282 
2283 argcount=0;
2284 XtSetArg(args[argcount],XmNmessageString,text);argcount++;
2285 XtSetArg(args[argcount],XmNdialogStyle,
2286  XmDIALOG_FULL_APPLICATION_MODAL);argcount++;
2287 dialog=XmCreateMessageDialog(drawing_area,"Map Backgrounds",args,argcount);
2288 XtUnmanageChild(XmMessageBoxGetChild(dialog,XmDIALOG_CANCEL_BUTTON));
2289 XtUnmanageChild(XmMessageBoxGetChild(dialog,XmDIALOG_HELP_BUTTON));
2290 XtUnmanageChild(XmMessageBoxGetChild(dialog,XmDIALOG_SEPARATOR));
2291 XtAddCallback(dialog,XmNokCallback,kill_dialog,NULL);
2292 
2293 XtSetSensitive(XmMessageBoxGetChild(dialog,XmDIALOG_OK_BUTTON),False);
2294 
2295 argcount=0;
2296 rowcol=XtCreateWidget("rowcolo",xmRowColumnWidgetClass,dialog,args,argcount);
2297 
2298 argcount=0;
2299 XtSetArg(args[argcount],XmNeditMode,XmMULTI_LINE_EDIT);argcount++;
2300 XtSetArg(args[argcount],XmNscrollBarDisplayPolicy,XmSTATIC);argcount++;
2301 XtSetArg(args[argcount],XmNeditable,False);argcount++;
2302 XtSetArg(args[argcount],XmNcolumns,40);argcount++;
2303 XtSetArg(args[argcount],XmNrows,10);argcount++;
2304 XtSetArg(args[argcount],XmNscrollVertical,True);argcount++;
2305 XtSetArg(args[argcount],XmNscrollHorizontal,True);argcount++;
2306 XtSetArg(args[argcount],XmNcursorPositionVisible,False);argcount++;
2307 XtSetArg(args[argcount],XmNscrollingPolicy,XmAPPLICATION_DEFINED);argcount++;
2308 s_text=XmCreateScrolledText(rowcol,"text",args,argcount);
2309 
2310 XtManageChild(s_text);
2311 
2312 XtVaGetValues(XtParent(s_text),XmNverticalScrollBar,&scrollbar,NULL);
2313 
2314 XtManageChild(rowcol);
2315 XtManageChild(dialog);
2316 XmStringFree(text);
2317 
2318 XmtWaitUntilMapped(dialog);
2319 
2320 posit=0;
2321 
2323 
2324 legend_save=-1;
2325 tlegend_save=-1;
2326 add_topo_flag=-1;
2327 zoom=1;
2328 
2330 
2331 gmtim=gmtime(&btim);
2332 
2333 emonth=gmtim->tm_mon;
2334 
2335 tget=btim - 24L*3600L*(long)9;
2336 
2337 gm=gmtime(&tget);
2338 
2339 smonth=gm->tm_mon;
2340 
2341 isom=emonth;
2343 
2344 read_maps((char *)data,smonth,emonth);
2345 
2346 basin_file[0]=0;hrap_file[0]=0;basin_climo_file[0]=0;
2347 grid_file[0]=0;
2348 station_list_file[0]=0;rfc[0]=0;
2349 map_out[0]=0;zmap_out[0]=0;tmap_out[0]=0;
2351 topo_buf[0]=0;
2352 ngrid_file[0]=0;
2353 hrap_grid_mask_file[0]=0;
2354 type[0]=0;
2355 gif_file[0]=0;
2356 gifbuf[0]=0;
2357 station_climo_file[0]=0;
2358 dbase_out[0]=0;zdbase_out[0]=0;tdbase_out[0]=0;;
2359 grid_out[0]=0;zgrid_out[0]=0;tgrid_out[0]=0;
2360 
2361 fr=fopen((char *)data,"r");
2362 
2363 for(;;) {
2364 
2365  p=fgets(ibuf,120,fr);
2366 
2367  if(p==NULL)
2368  break;
2369 
2370  p=strchr(ibuf,'\n');
2371  if(p!=NULL)
2372  *p=0;
2373  p=pars_line(ibuf,"station_climo_list=",station_climo_file);
2374  p=pars_line(ibuf,"rfc=",rfc);
2375  p=pars_line(ibuf,"obs_archive_directory=",obs_archive_file);
2376  p=pars_line(ibuf,"scratch_directory=",scratch_file);
2377 
2378  p=pars_line(ibuf,"station_list=",station_list_file);
2379  p=pars_line(ibuf,"hrap_gage_grid=",hrap_gage_file);
2380  p=pars_line(ibuf,"hrap_zgage_grid=",hrap_zgage_file);
2381  p=pars_line(ibuf,"hrap_tgage_grid=",hrap_tgage_file);
2382  p=pars_line(ibuf,"basins=",basin_file);
2383  p=pars_line(ibuf,"hrap=",hrap_file);
2384  p=pars_line(ibuf,"type=",type);
2385  p=pars_line(ibuf,"OPOINT_out=",dbase_out);
2386  p=pars_line(ibuf,"OGRID_out=",grid_out);
2387  p=pars_line(ibuf,"OMAP_out=",map_out);
2388  p=pars_line(ibuf,"OZPOINT_out=",zdbase_out);
2389  p=pars_line(ibuf,"OZGRID_out=",zgrid_out);
2390  p=pars_line(ibuf,"OMAZ_out=",zmap_out);
2391  p=pars_line(ibuf,"OTPOINT_out=",tdbase_out);
2392  p=pars_line(ibuf,"OTGRID_out=",tgrid_out);
2393  p=pars_line(ibuf,"OMAT_out=",tmap_out);
2394 
2395 
2396  if((p=pars_line(ibuf,"pxtemp=",dbuf))!=NULL) {
2397 
2398  pxtemp=atof(dbuf);
2399  dmvalue=pxtemp*100*3.28/.55;
2400 
2401  }
2402 
2403  p=pars_line(ibuf,"topo_scale=",topo_buf);
2404  p=pars_line(ibuf,"hrap_grid_mask=",hrap_grid_mask_file);
2405  p=pars_line(ibuf,"gif_directory=",gif_file);
2406 
2407  if((p=pars_line(ibuf,"gif_location=",gifbuf))!=NULL)
2408  strcpy(gifbuf,p);
2409 
2410  if((p=pars_line(ibuf,"type_source=",dbuf))!=NULL) {
2411 
2412  q=strchr(p,',');
2413 
2414  if(q==NULL)
2415  continue;
2416 
2417  *q=0;
2418 
2419  strcpy(ts[tsmax].abr,p);
2420 
2421  strcpy(ts[tsmax].name,q+1);
2422 
2423  tsmax++;
2424 
2425  }
2426 
2427 
2428  }
2429 
2430 printf("thru 1\n");
2431 
2432 if(gifbuf[0]!=0) {
2433 
2434  m=0;
2435  while(gifbuf[m]!=0) {
2436 
2437  if(gifbuf[m]==',')
2438  gifbuf[m]=' ';
2439 
2440  m++;
2441 
2442  }
2443 
2444  ier=sscanf(gifbuf,"%f %f %f %f %f %f",
2445  &giflat[1],&giflon[1],
2446  &giflat[2],&giflon[2],
2447  &giflat[3],&giflon[3]);
2448 
2449  maxgif=ier/2;
2450 
2451  }
2452 
2453 if(gif_file[0]==0)
2454  strcpy(gif_file,scratch_file);
2455 
2456 if(type[0]==0)
2457  strcpy(type,"2");
2458 
2459 if(topo_buf[0] != 0)
2460  topo_scale=atof(topo_buf);
2461 
2462 fclose(fr);
2463 
2464 sprintf(pcpn_file,"%s/opoint.%s.",scratch_file,rfc);
2465 sprintf(proc_pcpn_file,"%s/opoint2.%s.",scratch_file,rfc);
2466 sprintf(snow_file,"%s/snopoint.%s.",scratch_file,rfc);
2467 
2468 sprintf(map_file,"%s/omap.%s.",scratch_file,rfc);
2469 sprintf(grid_file,"%s/ogrid.%s.",scratch_file,rfc);
2470 sprintf(ngrid_file,"%s/ngrid.",scratch_file);
2471 
2472 sprintf(zpoint1_file,"%s/ozpoint.%s.",scratch_file,rfc);
2473 sprintf(zpoint2_file,"%s/ozpoint2.%s.",scratch_file,rfc);
2474 sprintf(zgrid_file,"%s/ozgrid.%s.",scratch_file,rfc);
2475 sprintf(rsel_file,"%s/omaz.%s.",scratch_file,rfc);
2476 
2477 sprintf(tpoint1_file,"%s/otpoint.%s.",scratch_file,rfc);
2478 sprintf(tpoint2_file,"%s/otpoint2.%s.",scratch_file,rfc);
2479 sprintf(tgrid_file,"%s/otgrid.%s.",scratch_file,rfc);
2480 sprintf(mat_file,"%s/omat.%s.",scratch_file,rfc);
2481 
2482 if(station_list_file[0] != 0) {
2483 
2484  strcpy(dbuf,"reading zstation list\n");
2485  posit=posit+strlen(dbuf);
2486  XmTextInsert(s_text,posit,dbuf);
2487 
2488  XtVaGetValues(scrollbar,XmNmaximum,&scrollm,NULL);
2489  XmScrollBarGetValues(scrollbar,&ivalue,&slider_size,
2490  &increment,&page_increment);
2491  XmScrollBarSetValues(scrollbar,scrollm-slider_size,
2492  slider_size,increment,page_increment,True);
2493 
2494  XmUpdateDisplay(top_level);
2495  get_zstation_list(station_list_file);
2496 
2497  }
2498 
2499 if(station_list_file[0] != 0) {
2500 
2501  strcpy(dbuf,"reading tstation list\n");
2502  posit=posit+strlen(dbuf);
2503  XmTextInsert(s_text,posit,dbuf);
2504 
2505  XtVaGetValues(scrollbar,XmNmaximum,&scrollm,NULL);
2506  XmScrollBarGetValues(scrollbar,&ivalue,&slider_size,
2507  &increment,&page_increment);
2508  XmScrollBarSetValues(scrollbar,scrollm-slider_size,
2509  slider_size,increment,page_increment,True);
2510 
2511  XmUpdateDisplay(top_level);
2512  get_tstation_list(station_list_file,smonth,emonth);
2513 
2514  }
2515 
2516 if(station_list_file[0] != 0) {
2517 
2518  strcpy(dbuf,"reading station list\n");
2519  posit=posit+strlen(dbuf);
2520  XmTextInsert(s_text,posit,dbuf);
2521 
2522  XtVaGetValues(scrollbar,XmNmaximum,&scrollm,NULL);
2523  XmScrollBarGetValues(scrollbar,&ivalue,&slider_size,
2524  &increment,&page_increment);
2525  XmScrollBarSetValues(scrollbar,scrollm-slider_size,
2526  slider_size,increment,page_increment,True);
2527 
2528  XmUpdateDisplay(top_level);
2530 
2531  }
2532 
2533 for(m=0;m<max_stations;m++) {
2534 
2535  for(l=0;l<maxdays;l++) {
2536 
2537  pdata[l].stn[m].scons=calloc(5,sizeof(short int));
2538  pdata[l].stn[m].rain=calloc(5,sizeof(struct rain));
2539  pdata[l].stn[m].frain=calloc(5,sizeof(struct rain));
2540  pdata[l].stn[m].frzlvl=calloc(5,sizeof(int));
2541  pdata[l].stn[m].snoflag=calloc(5,sizeof(short int));
2542  pdata[l].stn[m].sflag=calloc(5,sizeof(short int));
2543  pdata[l].stn[m].srain=calloc(5,sizeof(struct rain));
2544 
2545  }
2546 
2547 }
2548 
2549 for(m=0;m<max_tstations;m++) {
2550 
2551  for(l=0;l<maxdays;l++) {
2552 
2553  tdata[l].stn[m].tlevel1=calloc(6,sizeof(struct tlevel));
2554  tdata[l].stn[m].tlevel2=calloc(6,sizeof(struct tlevel));
2555 
2556  }
2557 
2558 }
2559 
2560 for(m=0;m<max_zstations;m++) {
2561 
2562  for(l=0;l<maxdays;l++) {
2563 
2564  zdata[l].stn[m].zlevel1=calloc(5,sizeof(struct zlevel));
2565  zdata[l].stn[m].zlevel2=calloc(5,sizeof(struct zlevel));
2566 
2567  }
2568 
2569 }
2570 
2572 
2574 
2576 
2578 
2579 if(isohyets_used==0)
2580  method=1;
2581 
2582 items[0].label=NULL;
2583 items[0].callback=NULL;
2584 items[0].callback_data=NULL;
2585 
2586 main_bar=BuildPulldownPushMenu(menu_bar,"File",'M',items);
2587 jwidget=AttachToCascade(menu_bar,"File",main_bar);
2588 
2589 argcount=0;
2590 
2591 pbutton=XmCreatePushButton(main_bar,"Send to Database",args,argcount);
2592 XtAddCallback(pbutton,XmNactivateCallback,send_dbase,NULL);
2593 XtManageChild(pbutton);
2594 
2595 argcount=0;
2596 
2597 pbutton=XmCreatePushButton(main_bar,"Make GIF",args,argcount);
2598 XtAddCallback(pbutton,XmNactivateCallback,make_gif,NULL);
2599 XtManageChild(pbutton);
2600 
2601 argcount=0;
2602 
2603 
2604 pbutton=XmCreatePushButton(main_bar,"Quit",args,argcount);
2605 XtAddCallback(pbutton,XmNactivateCallback,quit_all,NULL);
2606 XtManageChild(pbutton);
2607 
2608 strcpy(dbuf,"reading basin data\n");
2609 posit=posit+strlen(dbuf);
2610 XmTextInsert(s_text,posit,dbuf);
2611 
2612 XtVaGetValues(scrollbar,XmNmaximum,&scrollm,NULL);
2613 XmScrollBarGetValues(scrollbar,&ivalue,&slider_size,
2614  &increment,&page_increment);
2615 XmScrollBarSetValues(scrollbar,scrollm-slider_size,
2616  slider_size,increment,page_increment,True);
2617 
2618 XmUpdateDisplay(top_level);
2619 
2621 
2622 strcpy(dbuf,"reading Precipitation data\n");
2623 posit=posit+strlen(dbuf);
2624 XmTextInsert(s_text,posit,dbuf);
2625 
2626 XtVaGetValues(scrollbar,XmNmaximum,&scrollm,NULL);
2627 XmScrollBarGetValues(scrollbar,&ivalue,&slider_size,
2628  &increment,&page_increment);
2629 XmScrollBarSetValues(scrollbar,scrollm-slider_size,
2630  slider_size,increment,page_increment,True);
2631 
2632 XmUpdateDisplay(top_level);
2633 
2634 ier=chdir(scratch_file);
2635 
2636 if(ier==0) {
2637 
2638 
2639  }
2640 
2641 else {
2642 
2643  printf("could not change directory to %s\n",scratch_file);
2644 
2645  exit(1);
2646 
2647  }
2648 
2649 for(m=0;m<maxdays;m++) {
2650 
2651  tget=btim - 24L*3600L*(long)m;
2652 
2654 
2656 
2657  for(k=0;k<5;k++) {
2658 
2659  if(k < 2)
2660  sget=tget-84600L;
2661 
2662  else
2663  sget=tget;
2664 
2665  gmtim=gmttime(&sget);
2666 
2667  kk=3-k;
2668 
2669  sprintf(dbuf,"%s%02d-%02d-%02d.%s",ngrid_file,
2670  gm->tm_mon+1,gm->tm_mday,gm->tm_year,timefile[k]);
2671 
2672  if(k < 4)
2673  num=50+m*4+kk;
2674 
2675  else
2676  num=90+m;
2677 
2678  mer=read_qpf_grids(num,dbuf);
2679 
2680 
2681 
2682  }
2683 
2684  pdata[m].stddev=3.0;
2685 
2686  tdata[m].stddev=10.0;
2687 
2688  tget=btim - 24L*3600L*(long)m;
2689 
2690  gm=gmttime(&tget);
2691 
2692  sprintf(preca,"%s%02d-%02d-%02d",
2693  pcpn_file,gm->tm_mon+1,gm->tm_mday,gm->tm_year);
2694  sprintf(precb,"%s%02d-%02d-%02d",
2695  proc_pcpn_file,gm->tm_mon+1,gm->tm_mday,gm->tm_year);
2696  sprintf(precc,"%sdev.%02d-%02d-%02d",
2697  proc_pcpn_file,gm->tm_mon+1,gm->tm_mday,gm->tm_year);
2698  sprintf(precd,"%sbad.%02d-%02d-%02d",
2699  proc_pcpn_file,gm->tm_mon+1,gm->tm_mday,gm->tm_year);
2700  sprintf(prece,"%s%02d-%02d-%02d",
2701  snow_file,gm->tm_mon+1,gm->tm_mday,gm->tm_year);
2702  sprintf(zpointa,"%s%02d-%02d-%02d",
2703  zpoint1_file,gm->tm_mon+1,gm->tm_mday,gm->tm_year);
2704  sprintf(zpointb,"%s%02d-%02d-%02d",
2705  zpoint2_file,gm->tm_mon+1,gm->tm_mday,gm->tm_year);
2706  sprintf(tpointa,"%s%02d-%02d-%02d",
2707  tpoint1_file,gm->tm_mon+1,gm->tm_mday,gm->tm_year);
2708  sprintf(tpointb,"%s%02d-%02d-%02d",
2709  tpoint2_file,gm->tm_mon+1,gm->tm_mday,gm->tm_year);
2710  sprintf(tpointd,"%sbad.%02d-%02d-%02d",
2711  tpoint2_file,gm->tm_mon+1,gm->tm_mday,gm->tm_year);
2712  sprintf(tpointc,"%sdev.%02d-%02d-%02d",
2713  tpoint2_file,gm->tm_mon+1,gm->tm_mday,gm->tm_year);
2714 
2715  sprintf(databuf,"%02d-%02d-%02d",gm->tm_mon+1,gm->tm_mday,gm->tm_year);
2716 
2717  sprintf(buf,"cp %s/opoint.%s.%02d-%02d-%02d %s",obs_archive_file,rfc,
2718  gm->tm_mon+1,gm->tm_mday,gm->tm_year,scratch_file);
2719 
2720  system(buf);
2721 
2722  sprintf(buf,"cp %s/snopoint.%s.%02d-%02d-%02d %s",obs_archive_file,rfc,
2723  gm->tm_mon+1,gm->tm_mday,gm->tm_year,scratch_file);
2724 
2725  system(buf);
2726 
2727  sprintf(buf,"cp %s/ozpoint.%s.%02d-%02d-%02d %s",obs_archive_file,rfc,
2728  gm->tm_mon+1,gm->tm_mday,gm->tm_year,scratch_file);
2729 
2730  system(buf);
2731 
2732  sprintf(buf,"cp %s/otpoint.%s.%02d-%02d-%02d %s",obs_archive_file,rfc,
2733  gm->tm_mon+1,gm->tm_mday,gm->tm_year,scratch_file);
2734 
2735  system(buf);
2736 
2737  read_snow(prece,m);
2738 
2739  mer=read_precip_a(preca,tget,m);
2740 
2741  read_bad_values(precd,m);
2742 
2743  ier=read_precip_b(precb,tget,m);
2744 
2745  read_zlevel_a(zpointa,tget,m);
2746 
2747  zer=read_zlevel_b(zpointb,tget,m);
2748 
2749  read_t_a(tpointa,tget,m);
2750 
2751  read_bad_tvalues(tpointd,m);
2752 
2753  ter=read_t_b(tpointb,tget,m);
2754 
2755  fp=fopen(precc,"r");
2756  if(fp!=NULL) {
2757 
2758  p=fgets(ibuf,80,fp);
2759 
2760  pdata[m].stddev=atof(ibuf);
2761 
2762  if(pdata[m].stddev != 1.0 &&
2763  pdata[m].stddev != 3.0 &&
2764  pdata[m].stddev != 5.0)
2765  pdata[m].stddev=3.0;
2766 
2767  fclose(fp);
2768 
2769  }
2770 
2771  fp=fopen(tpointc,"r");
2772  if(fp!=NULL) {
2773 
2774  p=fgets(ibuf,80,fp);
2775 
2776  tdata[m].stddev=atof(ibuf);
2777 
2778  if(tdata[m].stddev != 5.0 &&
2779  tdata[m].stddev != 10.0 &&
2780  tdata[m].stddev != 15.0)
2781  tdata[m].stddev=10.0;
2782 
2783  fclose(fp);
2784 
2785  }
2786 
2787  if(ier==1)
2788  sprintf(dbuf,"%s - level 2 data\n",databuf);
2789 
2790  else if(ier==-1 && mer==1)
2791  sprintf(dbuf,"%s - level 1 data\n",databuf);
2792 
2793  else if(ier==-2 && mer==1)
2794  sprintf(dbuf,"%s - level 1 data overwrite\n",databuf);
2795 
2796  else
2797  sprintf(dbuf,"%s - no data\n",databuf);
2798  posit=posit+strlen(dbuf);
2799  XmTextInsert(s_text,posit,dbuf);
2800 
2801  XtVaGetValues(scrollbar,XmNmaximum,&scrollm,NULL);
2802  XmScrollBarGetValues(scrollbar,&ivalue,&slider_size,
2803  &increment,&page_increment);
2804  XmScrollBarSetValues(scrollbar,scrollm-slider_size,
2805  slider_size,increment,page_increment,True);
2806 
2807  XmUpdateDisplay(top_level);
2808 
2810 
2812 
2814 
2815  check_consistency(m);
2816 
2817  restore_bad_values(m);
2818 
2820 
2822 
2824 
2825  if(ier==1) {
2826 
2827  for(k=0;k<5;k++) {
2828 
2829  if(k < 2)
2830  sget=tget-84600L;
2831 
2832  else
2833  sget=tget;
2834 
2835  gmtim=gmttime(&sget);
2836 
2837  kk=3-k;
2838 
2839  sprintf(dbuf,"%s%02d-%02d-%02d.%s",ngrid_file,
2840  gm->tm_mon+1,gm->tm_mday,gm->tm_year,timefile[k]);
2841 
2842  if(k < 4)
2843  num=50+m*4+kk;
2844 
2845  else
2846  num=90+m;
2847 
2848  mer=read_qpf_grids(num,dbuf);
2849 
2850  sprintf(dbuf,"%s%02d-%02d-%02d.%s",grid_file,
2851  gm->tm_mon+1,gm->tm_mday,gm->tm_year,timefile[k]);
2852 
2853 
2854  if(k < 4)
2855  num=m*4+kk;
2856 
2857  else
2858  num=40+m;
2859 
2860  mer=read_qpf_grids(num,dbuf);
2861 
2862  if(mer==-1) {
2863 
2864  if(k==4)
2865  mk=1;
2866 
2867  else
2868  mk=0;
2869 
2870  if(pdata[m].used[k]!=0) {
2871 
2872  render_pcp(m,k,mk);
2873 
2874  write_qpf_grids(dbuf);
2875 
2876  }
2877 
2878  }
2879 
2880  make_map(num);
2881 
2882 
2883  }
2884 
2885  }
2886 
2887 if(zer==1) {
2888 
2889 for(k=0;k<4;k++) {
2890 
2891  if(zdata[m].level[k] != 2)
2892  continue;
2893 
2894  if(k < 2)
2895  sget=tget-84600L;
2896 
2897  else
2898  sget=tget;
2899 
2900  gmtim=gmttime(&sget);
2901 
2902  kk=3-k;
2903 
2904  sprintf(dbuf,"%s%02d-%02d-%02d.%s",zgrid_file,
2905  gm->tm_mon+1,gm->tm_mday,gm->tm_year,ztimefile[k]);
2906 
2907  num=100+m*4+kk;
2908 
2909  mer=read_qpf_grids(num,dbuf);
2910 
2911  if(mer==-1)
2912  render_z(m,k,0);
2913 
2914  make_rsel(num,num-100);
2915 
2916  }
2917 
2918 }
2919 
2920 if(ter==1) {
2921 
2922 for(k=0;k<6;k++) {
2923 
2924  if(tdata[m].level[k] != 2)
2925  continue;
2926 
2927  if(k < 2)
2928  sget=tget-84600L;
2929 
2930  else
2931  sget=tget;
2932 
2933  gmtim=gmttime(&sget);
2934 
2935  kk=3-k;
2936 
2937  sprintf(dbuf,"%s%02d-%02d-%02d.%s",tgrid_file,
2938  gm->tm_mon+1,gm->tm_mday,gm->tm_year,ttimefile[k]);
2939 
2940  if(k < 4) {
2941 
2942  num=150+m*4+kk;
2943 
2944  mer=read_qpf_grids(num,dbuf);
2945 
2946  if(mer==-1)
2947  render_t6(m,k,0);
2948 
2949  make_mat(num,num-150);
2950 
2951  }
2952 
2953  else if(k==4){
2954 
2955  num=190+m;
2956 
2957  mer=read_qpf_grids(num,dbuf);
2958 
2959  if(mer==-1)
2960  render_t(m,k,1);
2961 
2962  }
2963 
2964  else if(k==5){
2965 
2966  num=200+m;
2967 
2968  mer=read_qpf_grids(num,dbuf);
2969 
2970  if(mer==-1)
2971  render_t(m,k,2);
2972 
2973  }
2974 
2975  }
2976 
2977 }
2978 
2979 }
2980 
2981 get_bad_snotel();
2982 
2984 
2985 for(m=0;m<maxdays;m++)
2986  get_zlevel(m);
2987 
2988 /* edit menus */
2989 
2990 items[0].label="Precipitation";
2992 items[0].callback_data=NULL;
2993 items[1].label="Freezing level";
2995 items[1].callback_data=NULL;
2996 items[2].label="Temperature";
2998 items[2].callback_data=NULL;
2999 items[3].label=NULL;
3000 
3001 main_bar=BuildPulldownPushMenu(menu_bar,"Edit",'M',items);
3002 jwidget=AttachToCascade(menu_bar,"Edit",main_bar);
3003 
3004 main_bar=BuildPulldownToggleMenu(menu_bar,"Backgrounds",'M',ktems);
3005 jwidget=AttachToCascade(menu_bar,"Backgrounds",main_bar);
3006 
3007 items[0].label="Find station";
3008 items[0].callback=other_pcpn_options;
3009 items[0].callback_data=(XtPointer)1;
3010 items[1].label=NULL;
3011 
3012 main_bar=BuildPulldownPushMenu(menu_bar,"Options",'M',items);
3013 jwidget=AttachToCascade(menu_bar,"Options",main_bar);
3014 
3015 /* products menu */
3016 
3017 XtManageChild(menu_bar);
3018 
3019 XmMainWindowSetAreas(main_window,menu_bar,NULL,NULL,NULL,drawing_area);
3020 
3021 strcpy(dbuf,"Done!!\n");
3022 posit=posit+strlen(dbuf);
3023 XmTextInsert(s_text,posit,dbuf);
3024 
3025 XtVaGetValues(scrollbar,XmNmaximum,&scrollm,NULL);
3026 XmScrollBarGetValues(scrollbar,&ivalue,&slider_size,
3027  &increment,&page_increment);
3028 XmScrollBarSetValues(scrollbar,scrollm-slider_size,
3029  slider_size,increment,page_increment,True);
3030 
3031 get_legend();
3032 
3033 
3034 XmUpdateDisplay(top_level);
3035 
3036 XtSetSensitive(XmMessageBoxGetChild(dialog,XmDIALOG_OK_BUTTON),True);
3037 
3038 }
3039 void kill_dialog(Widget w,XtPointer data,XmDrawingAreaCallbackStruct *call_data)
3040 {
3041 
3042 first_through=1;
3043 XtDestroyWidget(w);
3044 send_expose();
3045 
3046 }
3047 
3048 void change_plot(Widget w,XtPointer data,XtPointer junk)
3049 
3050 {
3051 
3052 plot_view=(int)data;
3053 send_expose();
3054 
3055 }
3056 
3057 void create_options(Widget parent, XtCallbackProc callback, int active, char **labels, int n) {
3058  Widget menu, option, button, abutton;
3059  int i, argcount;
3060  Arg args[20];
3061 
3062  menu = XmCreatePulldownMenu(parent, "duh", NULL, 0);
3063  for(i = 0; i < n; i++) {
3064  button = CreateMenuButton(labels[i], menu, callback, NULL, 0);
3065  if (active == i) {
3066  abutton = button;
3067  }
3068  }
3069  argcount = 0;
3070  XtSetArg(args[argcount], XmNsubMenuId, menu); argcount++;
3071  XtSetArg(args[argcount], XmNmenuHistory, abutton); argcount++;
3072  option = XmCreateOptionMenu(parent, "duh", args, argcount);
3073  XtManageChild(option);
3074 }
3075 
3076 
3078 
3079 {
3080 
3081 Arg args[20];
3082 Cardinal argcount;
3083 char *s[10];
3084 XmString t;
3085 Widget rowcol,pbutton,rowcol2,rowcol3,rowcol4,rowcol5,rowcol6,rowcol7,rowcol8,rowcol9,arrow1,arrow2,scale,sep;
3086 int i,time_pos;
3087 int m;
3088 int j;
3089 Widget widg,spbutton;
3090 Dimension width;
3091 static Position x,y;
3092 int leftx,xpos;
3093 int ival;
3094 Atom WM_DELETE_WINDOW;
3095 Widget shell;
3096 static XmButtonType otypes[]={XmTITLE};
3097 XmString olabels[1];
3098 olabels[0]=XmStringCreateLocalized(" ");
3099 
3100 XtSetArg(args[0],XmNx,&x);
3101 XtSetArg(args[1],XmNy,&y);
3102 XtSetArg(args[2],XtNwidth,&width);
3103 XtGetValues(top_level,args,3);
3104 
3105 leftx=max_width- (x + width);
3106 
3107 if(leftx >= 300)
3108  xpos= x + width;
3109 
3110 else
3111  xpos=max_width-300;
3112 
3113 if(pcpn_widget != NULL)
3114  return;
3115 
3116 qpf_on=1;
3117 
3118 if(z_widget != NULL) {
3119 
3120  XtDestroyWidget(z_widget);
3121  z_widget=NULL;
3122  flf_on=-1;
3123 
3124  }
3125 
3126 if(maxmin_widget != NULL) {
3127 
3128  XtDestroyWidget(maxmin_widget);
3129  maxmin_widget=NULL;
3130  maxmin_on=-1;
3131 
3132  }
3133 
3135 
3136 argcount=0;
3137 XtSetArg(args[argcount],XmNx, xpos);argcount++;
3138 XtSetArg(args[argcount],XmNy, y);argcount++;
3139 XtSetArg(args[argcount],XmNdefaultPosition, False);argcount++;
3140 pcpn_widget=XmCreateMessageDialog(drawing_area,"QC_stations",args,argcount);
3141 
3142 XtUnmanageChild(XmMessageBoxGetChild(pcpn_widget,XmDIALOG_CANCEL_BUTTON));
3143 XtUnmanageChild(XmMessageBoxGetChild(pcpn_widget,XmDIALOG_HELP_BUTTON));
3144 XtUnmanageChild(XmMessageBoxGetChild(pcpn_widget,XmDIALOG_OK_BUTTON));
3145 XtUnmanageChild(XmMessageBoxGetChild(pcpn_widget,XmDIALOG_SEPARATOR));
3146 
3147 shell=XtParent(pcpn_widget);
3148 WM_DELETE_WINDOW=XmInternAtom(XtDisplay(top_level),"WM_DELETE_WINDOW",False);
3149 XmAddWMProtocolCallback(shell,WM_DELETE_WINDOW,change_pcpn_edit_mode,NULL);
3150 
3151 if(pcpn_time_step != 0)
3152  pcpn_time_step=1;
3153 
3154 argcount=0;
3155 XtSetArg(args[argcount],XmNorientation,XmVERTICAL);argcount++;
3156 rowcol=XmCreateRowColumn(pcpn_widget,"Edit Precipitation",args,argcount);
3157 
3158 t=XmStringCreateLocalized("Data options");
3159 argcount=0;
3160 XtSetArg(args[argcount],XmNlabelString,t);argcount++;
3161 pbutton=XmCreateLabel(rowcol,"Label",args,argcount);
3162 XtManageChild(pbutton);
3163 XmStringFree(t);
3164 
3165 argcount=0;
3166 XtSetArg(args[argcount],XmNorientation,XmHORIZONTAL);argcount++;
3167 rowcol2=XmCreateRowColumn(rowcol,"Edit Stations",args,argcount);
3168 
3169 argcount=0;
3170 XtSetArg(args[argcount], XmNbuttonCount, 1);argcount++;
3171 XtSetArg(args[argcount], XmNbuttons, olabels); argcount++;
3172 XtSetArg(args[argcount], XmNbuttonType, otypes); argcount++;
3173 rowcol3=XmCreateSimpleOptionMenu(rowcol2,"Edit Stations",args,argcount);
3174 XtSetArg(args[0],XmNsubMenuId,&widg);
3175 XtGetValues(rowcol3,args,1);
3176 s[0]="6 hour";
3177 s[1]="24 hour";
3178 for(i=0;i<2;i++) {
3179 
3180  argcount=0;
3181  tpbutton[i]=XtVaCreateManagedWidget(s[i],xmPushButtonGadgetClass,widg,args,argcount,NULL);
3182  XtAddCallback(tpbutton[i],XmNactivateCallback,change_pcpn_time,
3183  (XtPointer)(i+2));
3184  }
3185 XtSetArg(args[0],XmNmenuHistory,tpbutton[pcpn_time_step]);
3186 XtSetValues(rowcol3,args,1);
3187 XtManageChild(rowcol3);
3188 
3189 argcount=0;
3190 XtSetArg(args[argcount],XmNarrowDirection,XmARROW_UP);argcount++;
3191 arrow1=XmCreateArrowButton(rowcol2,"up",args,argcount);
3192 XtAddCallback(arrow1,XmNactivateCallback,change_pcpn_time,(XtPointer)0);
3193 
3194 argcount=0;
3195 XtSetArg(args[argcount],XmNarrowDirection,XmARROW_DOWN);argcount++;
3196 arrow2=XmCreateArrowButton(rowcol2,"down",args,argcount);
3197 XtAddCallback(arrow2,XmNactivateCallback,change_pcpn_time,(XtPointer)1);
3198 
3199 XtManageChild(arrow1);
3200 XtManageChild(arrow2);
3201 
3202 argcount=0;
3203 XtSetArg(args[argcount], XmNbuttonCount, 1);argcount++;
3204 XtSetArg(args[argcount], XmNbuttons, olabels); argcount++;
3205 XtSetArg(args[argcount], XmNbuttonType, otypes); argcount++;
3206 rowcol1=XmCreateSimpleOptionMenu(rowcol,"Edit Stations",args,argcount);
3207 
3208 s[0]="Points";
3209 s[1]="Grids";
3210 s[2]="MAPs";
3211 s[3]="Points+Grids";
3212 s[4]="Points+MAPs";
3213 s[5]="None";
3214 
3215 XtSetArg(args[0],XmNsubMenuId,&widg);
3216 XtGetValues(rowcol1,args,1);
3217 
3218 for(i=0;i<6;i++) {
3219 
3220  diswidget[i]=XtVaCreateManagedWidget(s[i],xmPushButtonGadgetClass,widg,NULL);
3221  XtAddCallback(diswidget[i],XmNactivateCallback,display_pcpn_options,
3222  (XtPointer)i);
3223 
3224  if(pcpn_time_step==0)
3225  time_pos=pcp_flag;
3226 
3227  else
3228  time_pos=40+pcpn_day;
3229 
3230  if((i != 0 && i !=5) && pcp_in_use[time_pos]==-1)
3231  XtSetSensitive(diswidget[i],False);
3232 
3233 }
3234 
3235 if(points_flag==1 && pcp_in_use[time_pos]==-1)
3236  i=0;
3237 
3238 else if(points_flag==1 && grids_flag==-1 && map_flag==-1)
3239  i=0;
3240 
3241 else if(points_flag==-1 && grids_flag==1 && map_flag==-1)
3242  i=1;
3243 
3244 else if(points_flag==-1 && grids_flag==-1 && map_flag==1)
3245  i=2;
3246 
3247 else if(points_flag==1 && grids_flag==1 && map_flag==-1)
3248  i=3;
3249 
3250 else if(points_flag==1 && grids_flag==-1 && map_flag==1)
3251  i=4;
3252 
3253 else if(points_flag==-1 && grids_flag==-1 && map_flag==-1)
3254  i=5;
3255 
3256 XtSetArg(args[0],XmNmenuHistory,diswidget[i]);
3257 XtSetValues(rowcol1,args,1);
3258 
3259 argcount=0;
3260 XtSetArg(args[argcount],XmNpacking,XmPACK_TIGHT); argcount++;
3261 XtSetArg(args[argcount],XmNnumColumns,3);argcount++;
3262 XtSetArg(args[argcount],XmNorientation,XmHORIZONTAL);argcount++;
3263 rowcol4=XmCreateRowColumn(rowcol,"Edit Stations",args,argcount);
3264 
3265 argcount=0;
3266 
3267 rpbutton=XmCreatePushButton(rowcol4,"Render Grids+MAPs",args,argcount);
3268 XtAddCallback(rpbutton,XmNactivateCallback,other_pcpn_options,
3269  (XtPointer)0);
3270 
3271 XtManageChild(rpbutton);
3272 
3273 if(pcp_in_use[time_pos]==-1 && pdata[i].used[4]!=0)
3274  XtSetSensitive(rpbutton,True);
3275 else
3276  XtSetSensitive(rpbutton,False);
3277 
3278 argcount=0;
3279 
3280 gpbutton=XmCreatePushButton(rowcol4,"Group Edit",args,argcount);
3281 XtAddCallback(gpbutton,XmNactivateCallback,change_pcpn_zoom_mode,
3282  (XtPointer)0);
3283 
3284 XtManageChild(gpbutton);
3285 
3286 t=XmStringCreateLocalized("Precip type");
3287 argcount=0;
3288 XtSetArg(args[argcount],XmNlabelString,t);argcount++;
3289 XtSetArg(args[argcount], XmNbuttonCount, 1);argcount++;
3290 XtSetArg(args[argcount], XmNbuttons, olabels); argcount++;
3291 XtSetArg(args[argcount], XmNbuttonType, otypes); argcount++;
3292 rowcol15=XmCreateSimpleOptionMenu(rowcol,"Edit Stations",args,argcount);
3293 
3294 XtSetArg(args[0],XmNsubMenuId,&widg);
3295 XtGetValues(rowcol15,args,1);
3296 
3297 s[0]="Rain/Snow";
3298 s[1]="All";
3299 
3300 for(i=0;i<2;i++) {
3301 
3302  rswidget[i]=XtVaCreateManagedWidget(s[i],xmPushButtonGadgetClass,widg,NULL);
3303  XtAddCallback(rswidget[i],XmNactivateCallback,change_rsmode,
3304  (XtPointer)i);
3305  }
3306 
3307 if(rsmode==0)
3308  i=0;
3309 
3310 else if(rsmode==1)
3311  i=1;
3312 
3313 XtSetArg(args[0],XmNmenuHistory,rswidget[i]);
3314 XtSetValues(rowcol15,args,1);
3315 
3316 XmStringFree(t);
3317 
3318 sep=XmCreateSeparator(rowcol,"swp",NULL,0);
3319 XtManageChild(sep);
3320 
3321 t=XmStringCreateLocalized("Point type");
3322 argcount=0;
3323 XtSetArg(args[argcount],XmNlabelString,t);argcount++;
3324 pbutton=XmCreateLabel(rowcol,"Label",args,argcount);
3325 XtManageChild(pbutton);
3326 XmStringFree(t);
3327 
3328 argcount=0;
3329 XtSetArg(args[argcount],XmNpacking,XmPACK_COLUMN); argcount++;
3330 XtSetArg(args[argcount],XmNnumColumns,3);argcount++;
3331 XtSetArg(args[argcount],XmNorientation,XmVERTICAL);argcount++;
3332 rowcol7=XmCreateRowColumn(rowcol,"Edit Stations",args,argcount);
3333 
3334 s[0]="NEXRAD";
3335 
3336 for(m=0;m<tsmax;m++)
3337  s[m+1]=ts[m].name;
3338 
3339 s[m+1]="ALL";
3340 
3341 for(i=0;i<tsmax+2;i++) {
3342 
3343  if(i==0)
3344  dflag[i]=-1;
3345  else
3346  dflag[i]=1;
3347 
3348  argcount=0;
3349  XtSetArg(args[argcount],XmNselectColor,cmap[4]);argcount++;
3350 
3351  if(dflag[i]==1)
3352  XtSetArg(args[argcount],XmNset,True);
3353 
3354  else
3355  XtSetArg(args[argcount],XmNset,False);
3356 
3357  argcount++;
3358 
3359  bwidget[i]=XmCreateToggleButton(rowcol7,s[i],args,argcount);
3360  XtAddCallback(bwidget[i],XmNvalueChangedCallback,source_select,
3361  (XtPointer)i);
3362  XtManageChild(bwidget[i]);
3363 
3364  }
3365 
3366 t=XmStringCreateLocalized("Point quality");
3367 argcount=0;
3368 XtSetArg(args[argcount],XmNlabelString,t);argcount++;
3369 pbutton=XmCreateLabel(rowcol,"Label",args,argcount);
3370 XtManageChild(pbutton);
3371 XmStringFree(t);
3372 
3373 argcount=0;
3374 XtSetArg(args[argcount],XmNpacking,XmPACK_COLUMN); argcount++;
3375 XtSetArg(args[argcount],XmNnumColumns,2);argcount++;
3376 XtSetArg(args[argcount],XmNorientation,XmVERTICAL);argcount++;
3377 rowcol8=XmCreateRowColumn(rowcol,"Edit Stations",args,argcount);
3378 
3379 s[0]="Verified";
3380 s[1]="Screened";
3381 s[2]="Time Dist";
3382 s[3]="Manual";
3383 s[4]="Questionable";
3384 s[5]="Partial";
3385 s[6]="Estimated";
3386 s[7]="Bad";
3387 s[9]="All";
3388 
3389 for(i=0;i<10;i++)
3390  qflag[i]=1;
3391 
3392 qflag[5]=-1;
3393 
3394 for(i=0;i<10;i++) {
3395 
3396  j=i;
3397 
3398  if(i==8)
3399  continue;
3400 
3401  argcount=0;
3402 
3403  XtSetArg(args[argcount],XmNselectColor,cmap[4]);argcount++;
3404 
3405  if(qflag[funct[i]]==1)
3406  XtSetArg(args[argcount],XmNset,True);
3407 
3408  else
3409  XtSetArg(args[argcount],XmNset,False);
3410 
3411  argcount++;
3412  awidget[i]=XmCreateToggleButton(rowcol8,s[i],args,argcount);
3413  XtAddCallback(awidget[i],XmNvalueChangedCallback,quality_select,
3414  (XtPointer)j);
3415 
3416  XtManageChild(awidget[i]);
3417 
3418  }
3419 
3420 t=XmStringCreateLocalized("Point character");
3421 argcount=0;
3422 XtSetArg(args[argcount],XmNlabelString,t);argcount++;
3423 XtSetArg(args[argcount], XmNbuttonCount, 1);argcount++;
3424 XtSetArg(args[argcount], XmNbuttons, olabels); argcount++;
3425 XtSetArg(args[argcount], XmNbuttonType, otypes); argcount++;
3426 rowcol9=XmCreateSimpleOptionMenu(rowcol,"Edit Stations",args,argcount);
3427 
3428 XtSetArg(args[0],XmNsubMenuId,&widg);
3429 XtGetValues(rowcol9,args,1);
3430 
3431 s[0]="Tip";
3432 s[1]="Weigh";
3433 s[2]="Tip+Weigh";
3434 
3435 gage_char[0]=1;
3436 gage_char[1]=1;
3437 
3438 for(i=0;i<3;i++) {
3439 
3440  pbutton=XtVaCreateManagedWidget(s[i],xmPushButtonGadgetClass,widg,NULL);
3441  XtAddCallback(pbutton,XmNactivateCallback,change_character,
3442  (XtPointer)i);
3443  }
3444 
3445 XtSetArg(args[0],XmNmenuHistory,pbutton);
3446 XtSetValues(rowcol9,args,1);
3447 XmStringFree(t);
3448 
3449 t=XmStringCreateLocalized("Point display");
3450 argcount=0;
3451 XtSetArg(args[argcount],XmNlabelString,t);argcount++;
3452 XtSetArg(args[argcount], XmNbuttonCount, 1);argcount++;
3453 XtSetArg(args[argcount], XmNbuttons, olabels); argcount++;
3454 XtSetArg(args[argcount], XmNbuttonType, otypes); argcount++;
3455 rowcol5=XmCreateSimpleOptionMenu(rowcol,"Edit Stations",args,argcount);
3456 
3457 XtSetArg(args[0],XmNsubMenuId,&widg);
3458 XtGetValues(rowcol5,args,1);
3459 
3460 s[0]="Handbook 5";
3461 s[1]="PC";
3462 s[2]="Name";
3463 s[3]="Data";
3464 s[4]="Dev";
3465 
3466 plot_view=4;
3467 
3468 for(i=0;i<5;i++) {
3469 
3470  pbutton=XtVaCreateManagedWidget(s[i],xmPushButtonGadgetClass,widg,NULL);
3471  XtAddCallback(pbutton,XmNactivateCallback,change_plot,
3472  (XtPointer)(i+1));
3473 
3474  if(i==3)
3475  spbutton=pbutton;
3476  }
3477 
3478 XtSetArg(args[0],XmNmenuHistory,spbutton);
3479 XtSetValues(rowcol5,args,1);
3480 
3481 t=XmStringCreateLocalized("Point screening");
3482 
3483 argcount=0;
3484 XtSetArg(args[argcount],XmNlabelString,t);argcount++;
3485 XtSetArg(args[argcount], XmNbuttonCount, 1);argcount++;
3486 XtSetArg(args[argcount], XmNbuttons, olabels); argcount++;
3487 XtSetArg(args[argcount], XmNbuttonType, otypes); argcount++;
3488 rowcol10=XmCreateSimpleOptionMenu(rowcol,"Edit Stations",args,argcount);
3489 
3490 XtSetArg(args[0],XmNsubMenuId,&widg);
3491 XtGetValues(rowcol10,args,1);
3492 
3493 s[0]="Coarse";
3494 s[1]="Medium";
3495 s[2]="Fine";
3496 
3497 for(i=0;i<3;i++) {
3498 
3499  scwidget[i]=XtVaCreateManagedWidget(s[i],xmPushButtonGadgetClass,widg,NULL);
3500  XtAddCallback(scwidget[i],XmNactivateCallback,screening_options,
3501  (XtPointer)i);
3502  }
3503 
3504 if(pdata[pcpn_day].stddev==5.0)
3505  i=0;
3506 
3507 else if(pdata[pcpn_day].stddev==3.0)
3508  i=1;
3509 
3510 else
3511  i=2;
3512 
3513 XtSetArg(args[0],XmNmenuHistory,scwidget[i]);
3514 XtSetValues(rowcol10,args,1);
3515 
3516 XmStringFree(t);
3517 
3518 t=XmStringCreateLocalized("Point Tconsistency");
3519 
3520 argcount=0;
3521 XtSetArg(args[argcount],XmNlabelString,t);argcount++;
3522 XtSetArg(args[argcount], XmNbuttonCount, 1);argcount++;
3523 XtSetArg(args[argcount], XmNbuttons, olabels); argcount++;
3524 XtSetArg(args[argcount], XmNbuttonType, otypes); argcount++;
3525 rowcol17=XmCreateSimpleOptionMenu(rowcol,"Edit Stations",args,argcount);
3526 
3527 XtSetArg(args[0],XmNsubMenuId,&widg);
3528 XtGetValues(rowcol17,args,1);
3529 
3530 s[0]="Consistent";
3531 s[1]="Inconsistent";
3532 s[2]="All";
3533 
3534 for(i=0;i<3;i++) {
3535 
3536  tcwidget[i]=XtVaCreateManagedWidget(s[i],xmPushButtonGadgetClass,widg,NULL);
3537  XtAddCallback(tcwidget[i],XmNactivateCallback,change_tcmode,
3538  (XtPointer)i);
3539  }
3540 
3541 if(tcmode==0)
3542  i=0;
3543 
3544 else if(tcmode==1)
3545  i=1;
3546 
3547 else
3548  i=2;
3549 
3550 XtSetArg(args[0],XmNmenuHistory,tcwidget[i]);
3551 XtSetValues(rowcol17,args,1);
3552 
3553 XmStringFree(t);
3554 
3555 t=XmStringCreateLocalized("Point Sconsistency");
3556 
3557 argcount=0;
3558 XtSetArg(args[argcount],XmNlabelString,t);argcount++;
3559 XtSetArg(args[argcount], XmNbuttonCount, 1);argcount++;
3560 XtSetArg(args[argcount], XmNbuttons, olabels); argcount++;
3561 XtSetArg(args[argcount], XmNbuttonType, otypes); argcount++;
3562 rowcol18=XmCreateSimpleOptionMenu(rowcol,"Edit Stations",args,argcount);
3563 
3564 XtSetArg(args[0],XmNsubMenuId,&widg);
3565 XtGetValues(rowcol18,args,1);
3566 
3567 s[0]="Consistent";
3568 s[1]="Inconsistent";
3569 s[2]="All";
3570 
3571 for(i=0;i<3;i++) {
3572 
3573  dcwidget[i]=XtVaCreateManagedWidget(s[i],xmPushButtonGadgetClass,widg,NULL);
3574  XtAddCallback(dcwidget[i],XmNactivateCallback,change_dcmode,
3575  (XtPointer)i);
3576  }
3577 
3578 if(dcmode==0)
3579  i=0;
3580 
3581 else if(dcmode==1)
3582  i=1;
3583 
3584 else
3585  i=2;
3586 
3587 XtSetArg(args[0],XmNmenuHistory,dcwidget[i]);
3588 XtSetValues(rowcol18,args,1);
3589 
3590 XmStringFree(t);
3591 
3592 filter_value=0;
3593 t=XmStringCreateLocalized("Point filter (inches)");
3594 argcount=0;
3595 XtSetArg(args[argcount],XmNminimum,0);argcount++;
3596 XtSetArg(args[argcount],XmNmaximum,500);argcount++;
3597 XtSetArg(args[argcount],XmNscaleMultiple,1);argcount++;
3598 XtSetArg(args[argcount],XmNdecimalPoints,2);argcount++;
3599 XtSetArg(args[argcount],XmNshowValue,True);argcount++;
3600 XtSetArg(args[argcount],XmNtitleString,t);argcount++;
3601 XtSetArg(args[argcount],XmNorientation,XmHORIZONTAL);argcount++;
3602 scale=XmCreateScale(rowcol,"scale",args,argcount);
3603 XtManageChild(scale);
3604 XtAddCallback(scale,XmNvalueChangedCallback,new_filter,NULL);
3605 XmStringFree(t);
3606 
3608 t=XmStringCreateLocalized("Point reverse filter (inches)");
3609 argcount=0;
3610 XtSetArg(args[argcount],XmNminimum,0);argcount++;
3611 XtSetArg(args[argcount],XmNmaximum,2000);argcount++;
3612 XtSetArg(args[argcount],XmNscaleMultiple,1);argcount++;
3613 XtSetArg(args[argcount],XmNdecimalPoints,2);argcount++;
3614 XtSetArg(args[argcount],XmNshowValue,True);argcount++;
3615 XtSetArg(args[argcount],XmNtitleString,t);argcount++;
3616 XtSetArg(args[argcount],XmNprocessingDirection,XmMAX_ON_LEFT);argcount++;
3617 XtSetArg(args[argcount],XmNorientation,XmHORIZONTAL);argcount++;
3618 ival=2000;
3619 XtSetArg(args[argcount],XmNvalue,ival);argcount++;
3620 scale=XmCreateScale(rowcol,"scale",args,argcount);
3621 XtManageChild(scale);
3622 XtAddCallback(scale,XmNvalueChangedCallback,new_reverse_filter,NULL);
3623 XmStringFree(t);
3624 
3626 t=XmStringCreateLocalized("Point elevation (feet)");
3627 argcount=0;
3628 XtSetArg(args[argcount],XmNminimum,0);argcount++;
3629 XtSetArg(args[argcount],XmNmaximum,15000);argcount++;
3630 XtSetArg(args[argcount],XmNshowValue,True);argcount++;
3631 XtSetArg(args[argcount],XmNtitleString,t);argcount++;
3632 XtSetArg(args[argcount],XmNorientation,XmHORIZONTAL);argcount++;
3633 scale=XmCreateScale(rowcol,"scale",args,argcount);
3634 XtManageChild(scale);
3635 XtAddCallback(scale,XmNvalueChangedCallback,new_elevation_filter,NULL);
3636 XmStringFree(t);
3637 
3638 t=XmStringCreateLocalized("Pxtemp (deg C)");
3639 argcount=0;
3640 XtSetArg(args[argcount],XmNminimum,-100);argcount++;
3641 XtSetArg(args[argcount],XmNmaximum,300);argcount++;
3642 XtSetArg(args[argcount],XmNdecimalPoints,2);argcount++;
3643 XtSetArg(args[argcount],XmNshowValue,True);argcount++;
3644 XtSetArg(args[argcount],XmNtitleString,t);argcount++;
3645 XtSetArg(args[argcount],XmNorientation,XmHORIZONTAL);argcount++;
3646 ival=(int)(pxtemp*100);
3647 XtSetArg(args[argcount],XmNvalue,ival);argcount++;
3648 scale=XmCreateScale(rowcol,"scale",args,argcount);
3649 XtManageChild(scale);
3650 XtAddCallback(scale,XmNvalueChangedCallback,new_dm,NULL);
3651 XmStringFree(t);
3652 
3653 XtManageChild(rowcol);
3654 XtManageChild(rowcol1);
3655 XtManageChild(rowcol2);
3656 XtManageChild(rowcol4);
3657 XtManageChild(rowcol5);
3658 XtManageChild(rowcol7);
3659 XtManageChild(rowcol8);
3660 XtManageChild(rowcol9);
3661 XtManageChild(rowcol10);
3662 XtManageChild(rowcol15);
3663 XtManageChild(rowcol17);
3664 XtManageChild(rowcol18);
3665 XtManageChild(pcpn_widget);
3668 change_topo_flag=-1;
3669 change_frz_flag=-1;
3671 get_legend();
3672 
3673 send_expose();
3674 
3675 return;
3676 
3677 }
3678 
3679 
3681 
3682 {
3683 
3684 Arg args[20];
3685 Cardinal argcount;
3686 char *s[10];
3687 XmString t;
3688 Widget rowcol,pbutton,rowcol2,rowcol3,rowcol4,rowcol5,rowcol6,rowcol7,rowcol8,rowcol9,arrow1,arrow2,scale,sep;
3689 int i,time_pos;
3690 int m;
3691 int j;
3692 Widget widg,spbutton;
3693 Dimension width;
3694 static Position x,y;
3695 int leftx,xpos;
3696 int ival;
3697 Atom WM_DELETE_WINDOW;
3698 Widget shell;
3699 static XmButtonType otypes[]={XmTITLE};
3700 XmString olabels[1];
3701 olabels[0]=XmStringCreateLocalized(" ");
3702 
3703 XtSetArg(args[0],XmNx,&x);
3704 XtSetArg(args[1],XmNy,&y);
3705 XtSetArg(args[2],XtNwidth,&width);
3706 XtGetValues(top_level,args,3);
3707 
3708 leftx=max_width- (x + width);
3709 
3710 if(leftx >= 300)
3711  xpos= x + width;
3712 
3713 else
3714  xpos=max_width-300;
3715 
3716 if(maxmin_widget != NULL)
3717  return;
3718 
3719 maxmin_on=1;
3720 
3721 if(z_widget != NULL) {
3722 
3723  XtDestroyWidget(z_widget);
3724  z_widget=NULL;
3725  flf_on=-1;
3726 
3727  }
3728 
3729 if(pcpn_widget != NULL) {
3730 
3731  XtDestroyWidget(pcpn_widget);
3732  pcpn_widget=NULL;
3733  qpf_on=-1;
3734 
3735  }
3736 
3738 
3739 
3740 argcount=0;
3741 XtSetArg(args[argcount],XmNx, xpos);argcount++;
3742 XtSetArg(args[argcount],XmNy, y);argcount++;
3743 XtSetArg(args[argcount],XmNdefaultPosition, False);argcount++;
3744 maxmin_widget=XmCreateMessageDialog(drawing_area,"QC_stations",args,argcount);
3745 
3746 XtUnmanageChild(XmMessageBoxGetChild(maxmin_widget,XmDIALOG_CANCEL_BUTTON));
3747 XtUnmanageChild(XmMessageBoxGetChild(maxmin_widget,XmDIALOG_HELP_BUTTON));
3748 XtUnmanageChild(XmMessageBoxGetChild(maxmin_widget,XmDIALOG_OK_BUTTON));
3749 XtUnmanageChild(XmMessageBoxGetChild(maxmin_widget,XmDIALOG_SEPARATOR));
3750 
3751 shell=XtParent(maxmin_widget);
3752 WM_DELETE_WINDOW=XmInternAtom(XtDisplay(top_level),"WM_DELETE_WINDOW",False);
3753 XmAddWMProtocolCallback(shell,WM_DELETE_WINDOW,change_maxmin_edit_mode,NULL);
3754 
3755 if(pcpn_time_step==-1)
3756  pcpn_time_step=1;
3757 
3758 argcount=0;
3759 XtSetArg(args[argcount],XmNorientation,XmVERTICAL);argcount++;
3760 rowcol=XmCreateRowColumn(maxmin_widget,"Edit Precipitation",args,argcount);
3761 
3762 t=XmStringCreateLocalized("Data options");
3763 argcount=0;
3764 XtSetArg(args[argcount],XmNlabelString,t);argcount++;
3765 pbutton=XmCreateLabel(rowcol,"Label",args,argcount);
3766 XtManageChild(pbutton);
3767 XmStringFree(t);
3768 
3769 
3770 argcount=0;
3771 XtSetArg(args[argcount],XmNpacking,XmPACK_TIGHT); argcount++;
3772 XtSetArg(args[argcount],XmNnumColumns,4);argcount++;
3773 XtSetArg(args[argcount],XmNorientation,XmHORIZONTAL);argcount++;
3774 rowcol2=XmCreateRowColumn(rowcol,"Edit Stations",args,argcount);
3775 
3776 argcount=0;
3777 XtSetArg(args[argcount], XmNbuttonCount, 1);argcount++;
3778 XtSetArg(args[argcount], XmNbuttons, olabels); argcount++;
3779 XtSetArg(args[argcount], XmNbuttonType, otypes); argcount++;
3780 rowcol3=XmCreateSimpleOptionMenu(rowcol2,"Edit Stations",args,argcount);
3781 
3782 XtSetArg(args[0],XmNsubMenuId,&widg);
3783 XtGetValues(rowcol3,args,1);
3784 
3785 s[0]="6 hourly";
3786 s[1]="Maximum";
3787 s[2]="Minimum";
3788 
3789 for(i=0;i<3;i++) {
3790 
3791  tpbutton[i]=XtVaCreateManagedWidget(s[i],xmPushButtonGadgetClass,widg,NULL);
3792  XtAddCallback(tpbutton[i],XmNactivateCallback,change_maxmin_time,
3793  (XtPointer)(i+2));
3794  }
3795 
3796 
3797 XtSetArg(args[0],XmNmenuHistory,tpbutton[pcpn_time_step]);
3798 XtSetValues(rowcol3,args,1);
3799 
3800 argcount=0;
3801 XtSetArg(args[argcount],XmNarrowDirection,XmARROW_UP);argcount++;
3802 arrow1=XmCreateArrowButton(rowcol2,"up",args,argcount);
3803 XtAddCallback(arrow1,XmNactivateCallback,change_maxmin_time,(XtPointer)0);
3804 
3805 argcount=0;
3806 XtSetArg(args[argcount],XmNarrowDirection,XmARROW_DOWN);argcount++;
3807 arrow2=XmCreateArrowButton(rowcol2,"down",args,argcount);
3808 XtAddCallback(arrow2,XmNactivateCallback,change_maxmin_time,(XtPointer)1);
3809 
3810 XtManageChild(arrow1);
3811 XtManageChild(arrow2);
3812 
3813 argcount=0;
3814 XtSetArg(args[argcount], XmNbuttonCount, 1);argcount++;
3815 XtSetArg(args[argcount], XmNbuttons, olabels); argcount++;
3816 XtSetArg(args[argcount], XmNbuttonType, otypes); argcount++;
3817 rowcol1=XmCreateSimpleOptionMenu(rowcol,"Edit Stations",args,argcount);
3818 
3819 s[0]="Points";
3820 s[1]="Grids";
3821 s[2]="MATs";
3822 s[3]="Points+Grids";
3823 s[4]="Points+MATs";
3824 s[5]="None";
3825 
3826 XtSetArg(args[0],XmNsubMenuId,&widg);
3827 XtGetValues(rowcol1,args,1);
3828 
3829 for(i=0;i<6;i++) {
3830 
3831  diswidget[i]=XtVaCreateManagedWidget(s[i],xmPushButtonGadgetClass,widg,NULL);
3832  XtAddCallback(diswidget[i],XmNactivateCallback,display_pcpn_options,
3833  (XtPointer)i);
3834 
3835  if(pcpn_time_step==0)
3836  time_pos=150+pcp_flag;
3837 
3838  else if(pcpn_time_step==1)
3839  time_pos=190+pcpn_day;
3840 
3841  else if(pcpn_time_step==2)
3842  time_pos=190+pcpn_day;
3843 
3844  if((i != 0 && i !=5) && pcp_in_use[time_pos]==-1)
3845  XtSetSensitive(diswidget[i],False);
3846 
3847 }
3848 
3849 
3850 
3851 
3852 if(points_flag==1 && pcp_in_use[time_pos]==-1)
3853  i=0;
3854 
3855 else if(points_flag==1 && grids_flag==-1 && map_flag==-1)
3856  i=0;
3857 
3858 else if(points_flag==-1 && grids_flag==1 && map_flag==-1)
3859  i=1;
3860 
3861 else if(points_flag==-1 && grids_flag==-1 && map_flag==1)
3862  i=2;
3863 
3864 else if(points_flag==1 && grids_flag==1 && map_flag==-1)
3865  i=3;
3866 
3867 else if(points_flag==1 && grids_flag==-1 && map_flag==1)
3868  i=4;
3869 
3870 else if(points_flag==-1 && grids_flag==-1 && map_flag==-1)
3871  i=5;
3872 
3873 XtSetArg(args[0],XmNmenuHistory,diswidget[i]);
3874 XtSetValues(rowcol1,args,1);
3875 
3876 argcount=0;
3877 XtSetArg(args[argcount],XmNpacking,XmPACK_TIGHT); argcount++;
3878 XtSetArg(args[argcount],XmNnumColumns,3);argcount++;
3879 XtSetArg(args[argcount],XmNorientation,XmHORIZONTAL);argcount++;
3880 rowcol4=XmCreateRowColumn(rowcol,"Edit Stations",args,argcount);
3881 
3882 argcount=0;
3883 
3884 rpbutton=XmCreatePushButton(rowcol4,"Render Grids+MATs",args,argcount);
3885 XtAddCallback(rpbutton,XmNactivateCallback,other_pcpn_options,
3886  (XtPointer)3);
3887 
3888 
3889 XtManageChild(rpbutton);
3890 
3891 if(pcp_in_use[time_pos]==-1 && pdata[i].used[4]!=0)
3892  XtSetSensitive(rpbutton,True);
3893 else
3894  XtSetSensitive(rpbutton,False);
3895 
3896 argcount=0;
3897 
3898 gpbutton=XmCreatePushButton(rowcol4,"Group Edit",args,argcount);
3899 XtAddCallback(gpbutton,XmNactivateCallback,change_pcpn_zoom_mode,
3900  (XtPointer)1);
3901 
3902 XtManageChild(gpbutton);
3903 
3904 sep=XmCreateSeparator(rowcol,"swp",NULL,0);
3905 XtManageChild(sep);
3906 
3907 t=XmStringCreateLocalized("Point type");
3908 argcount=0;
3909 XtSetArg(args[argcount],XmNlabelString,t);argcount++;
3910 pbutton=XmCreateLabel(rowcol,"Label",args,argcount);
3911 XtManageChild(pbutton);
3912 XmStringFree(t);
3913 
3914 argcount=0;
3915 XtSetArg(args[argcount],XmNpacking,XmPACK_COLUMN); argcount++;
3916 XtSetArg(args[argcount],XmNnumColumns,3);argcount++;
3917 XtSetArg(args[argcount],XmNorientation,XmVERTICAL);argcount++;
3918 rowcol7=XmCreateRowColumn(rowcol,"Edit Stations",args,argcount);
3919 
3920 s[0]="NEXRAD";
3921 
3922 for(m=0;m<tsmax;m++)
3923  s[m+1]=ts[m].name;
3924 
3925 s[m+1]="ALL";
3926 
3927 for(i=0;i<tsmax+2;i++) {
3928 
3929  if(i==0)
3930  dflag[i]=-1;
3931  else
3932  dflag[i]=1;
3933 
3934  if(i==0)
3935  continue;
3936 
3937  argcount=0;
3938  XtSetArg(args[argcount],XmNselectColor,cmap[4]);argcount++;
3939 
3940  if(dflag[i]==1)
3941  XtSetArg(args[argcount],XmNset,True);
3942 
3943  else
3944  XtSetArg(args[argcount],XmNset,False);
3945 
3946  argcount++;
3947 
3948  bwidget[i]=XmCreateToggleButton(rowcol7,s[i],args,argcount);
3949  XtAddCallback(bwidget[i],XmNvalueChangedCallback,source_select,
3950  (XtPointer)i);
3951  XtManageChild(bwidget[i]);
3952 
3953  }
3954 
3955 t=XmStringCreateLocalized("Point quality");
3956 argcount=0;
3957 XtSetArg(args[argcount],XmNlabelString,t);argcount++;
3958 pbutton=XmCreateLabel(rowcol,"Label",args,argcount);
3959 XtManageChild(pbutton);
3960 XmStringFree(t);
3961 
3962 argcount=0;
3963 XtSetArg(args[argcount],XmNpacking,XmPACK_COLUMN); argcount++;
3964 XtSetArg(args[argcount],XmNnumColumns,2);argcount++;
3965 XtSetArg(args[argcount],XmNorientation,XmVERTICAL);argcount++;
3966 rowcol8=XmCreateRowColumn(rowcol,"Edit Stations",args,argcount);
3967 
3968 s[0]="Verified";
3969 s[1]="Screened";
3970 s[2]="Time Dist";
3971 s[3]="Manual";
3972 s[4]="Questionable";
3973 s[5]="Partial";
3974 s[6]="Estimated";
3975 s[7]="Bad";
3976 s[9]="All";
3977 
3978 for(i=0;i<10;i++)
3979  qflag[i]=1;
3980 
3981 qflag[5]=-1;
3982 
3983 for(i=0;i<10;i++) {
3984 
3985  j=i;
3986 
3987  if(i==8)
3988  continue;
3989 
3990  argcount=0;
3991 
3992  XtSetArg(args[argcount],XmNselectColor,cmap[4]);argcount++;
3993 
3994  if(qflag[funct[i]]==1)
3995  XtSetArg(args[argcount],XmNset,True);
3996 
3997  else
3998  XtSetArg(args[argcount],XmNset,False);
3999 
4000  argcount++;
4001  awidget[i]=XmCreateToggleButton(rowcol8,s[i],args,argcount);
4002  XtAddCallback(awidget[i],XmNvalueChangedCallback,quality_select,
4003  (XtPointer)j);
4004 
4005  XtManageChild(awidget[i]);
4006 
4007  }
4008 
4009 
4010 t=XmStringCreateLocalized("Point display");
4011 argcount=0;
4012 XtSetArg(args[argcount],XmNlabelString,t);argcount++;
4013 XtSetArg(args[argcount], XmNbuttonCount, 1);argcount++;
4014 XtSetArg(args[argcount], XmNbuttons, olabels); argcount++;
4015 XtSetArg(args[argcount], XmNbuttonType, otypes); argcount++;
4016 rowcol5=XmCreateSimpleOptionMenu(rowcol,"Edit Stations",args,argcount);
4017 
4018 XtSetArg(args[0],XmNsubMenuId,&widg);
4019 XtGetValues(rowcol5,args,1);
4020 
4021 s[0]="Handbook 5";
4022 s[1]="PC";
4023 s[2]="Name";
4024 s[3]="Data";
4025 s[4]="RFS";
4026 
4027 plot_view=4;
4028 
4029 for(i=0;i<6;i++) {
4030 
4031  pbutton=XtVaCreateManagedWidget(s[i],xmPushButtonGadgetClass,widg,NULL);
4032  XtAddCallback(pbutton,XmNactivateCallback,change_plot,
4033  (XtPointer)(i+1));
4034 
4035  if(i==3)
4036  spbutton=pbutton;
4037  }
4038 
4039 XtSetArg(args[0],XmNmenuHistory,spbutton);
4040 XtSetValues(rowcol5,args,1);
4041 
4042 t=XmStringCreateLocalized("Point screening");
4043 argcount=0;
4044 XtSetArg(args[argcount],XmNlabelString,t);argcount++;
4045 XtSetArg(args[argcount], XmNbuttonCount, 1);argcount++;
4046 XtSetArg(args[argcount], XmNbuttons, olabels); argcount++;
4047 XtSetArg(args[argcount], XmNbuttonType, otypes); argcount++;
4048 rowcol10=XmCreateSimpleOptionMenu(rowcol,"Edit Stations",args,argcount);
4049 
4050 XtSetArg(args[0],XmNsubMenuId,&widg);
4051 XtGetValues(rowcol10,args,1);
4052 
4053 s[0]="Coarse";
4054 s[1]="Medium";
4055 s[2]="Fine";
4056 
4057 for(i=0;i<3;i++) {
4058 
4059  scwidget[i]=XtVaCreateManagedWidget(s[i],xmPushButtonGadgetClass,widg,NULL);
4060  XtAddCallback(scwidget[i],XmNactivateCallback,screening_options,
4061  (XtPointer)i);
4062  }
4063 
4064 if(tdata[pcpn_day].stddev==15.0)
4065  i=0;
4066 
4067 else if(tdata[pcpn_day].stddev==10.0)
4068  i=1;
4069 
4070 else
4071  i=2;
4072 
4073 XtSetArg(args[0],XmNmenuHistory,scwidget[i]);
4074 XtSetValues(rowcol10,args,1);
4075 XmStringFree(t);
4076 
4078 t=XmStringCreateLocalized("Point elevation (feet)");
4079 argcount=0;
4080 XtSetArg(args[argcount],XmNminimum,0);argcount++;
4081 XtSetArg(args[argcount],XmNmaximum,15000);argcount++;
4082 XtSetArg(args[argcount],XmNshowValue,True);argcount++;
4083 XtSetArg(args[argcount],XmNtitleString,t);argcount++;
4084 XtSetArg(args[argcount],XmNorientation,XmHORIZONTAL);argcount++;
4085 scale=XmCreateScale(rowcol,"scale",args,argcount);
4086 XtManageChild(scale);
4087 XtAddCallback(scale,XmNvalueChangedCallback,new_elevation_filter,NULL);
4088 XmStringFree(t);
4089 
4090 XtManageChild(rowcol);
4091 XtManageChild(rowcol1);
4092 XtManageChild(rowcol2);
4093 XtManageChild(rowcol3);
4094 XtManageChild(rowcol4);
4095 XtManageChild(rowcol7);
4096 XtManageChild(rowcol8);
4097 XtManageChild(rowcol5);
4098 XtManageChild(rowcol10);
4099 XtManageChild(maxmin_widget);
4100 change_pcpn_flag=-1;
4102 change_topo_flag=-1;
4103 change_frz_flag=-1;
4105 get_legend();
4106 
4107 send_expose();
4108 
4109 return;
4110 
4111 }
4112 
4114 
4115 {
4116 
4117 Arg args[20];
4118 Cardinal argcount;
4119 char *s[10];
4120 XmString t;
4121 Widget
4122 rowcol,pbutton,rowcol2,rowcol3,rowcol4,rowcol5,rowcol6,rowcol7,rowcol8,rowcol9,arrow1,arrow2,scale,sep;
4123 int i,time_pos;
4124 int m;
4125 int j;
4126 Widget widg,spbutton;
4127 Dimension width;
4128 static Position x,y;
4129 int leftx,xpos;
4130 int ival;
4131 Atom WM_DELETE_WINDOW;
4132 Widget shell;
4133 static XmButtonType otypes[]={XmTITLE};
4134 XmString olabels[1];
4135 olabels[0]=XmStringCreateLocalized(" ");
4136 
4137 XtSetArg(args[0],XmNx,&x);
4138 XtSetArg(args[1],XmNy,&y);
4139 XtSetArg(args[2],XtNwidth,&width);
4140 XtGetValues(top_level,args,3);
4141 
4142 leftx=max_width- (x + width);
4143 
4144 if(leftx >= 300)
4145  xpos= x + width;
4146 
4147 else
4148  xpos=max_width-300;
4149 
4150 if(z_widget != NULL)
4151  return;
4152 
4153 if(pcpn_widget != NULL) {
4154 
4155  XtDestroyWidget(pcpn_widget);
4156  pcpn_widget=NULL;
4157  qpf_on=-1;
4158 
4159  }
4160 
4161 if(maxmin_widget != NULL) {
4162 
4163  XtDestroyWidget(maxmin_widget);
4164  maxmin_widget=NULL;
4165  maxmin_on=-1;
4166 
4167  }
4168 
4169 flf_on=1;
4171 
4172 argcount=0;
4173 XtSetArg(args[argcount],XmNx, xpos);argcount++;
4174 XtSetArg(args[argcount],XmNy, y);argcount++;
4175 XtSetArg(args[argcount],XmNdefaultPosition, False);argcount++;
4176 z_widget=XmCreateMessageDialog(drawing_area,"QC_zstations",args,argcount);
4177 
4178 XtUnmanageChild(XmMessageBoxGetChild(z_widget,XmDIALOG_CANCEL_BUTTON));
4179 XtUnmanageChild(XmMessageBoxGetChild(z_widget,XmDIALOG_HELP_BUTTON));
4180 XtUnmanageChild(XmMessageBoxGetChild(z_widget,XmDIALOG_OK_BUTTON));
4181 XtUnmanageChild(XmMessageBoxGetChild(z_widget,XmDIALOG_SEPARATOR));
4182 
4183 shell=XtParent(z_widget);
4184 WM_DELETE_WINDOW=XmInternAtom(XtDisplay(top_level),"WM_DELETE_WINDOW",False);
4185 XmAddWMProtocolCallback(shell,WM_DELETE_WINDOW,change_z_edit_mode,NULL);
4186 
4187 if(pcpn_time_step != 0) {
4188 
4189  pcpn_time_step=0;
4190  pcpn_time=0;
4191  pcp_flag=3+pcpn_day*4;
4192 
4193 }
4194 
4195 argcount=0;
4196 XtSetArg(args[argcount],XmNorientation,XmVERTICAL);argcount++;
4197 rowcol=XmCreateRowColumn(z_widget,"Edit Precipitation",args,argcount);
4198 
4199 t=XmStringCreateLocalized("Data options");
4200 argcount=0;
4201 XtSetArg(args[argcount],XmNlabelString,t);argcount++;
4202 pbutton=XmCreateLabel(rowcol,"Label",args,argcount);
4203 XtManageChild(pbutton);
4204 XmStringFree(t);
4205 
4206 argcount=0;
4207 XtSetArg(args[argcount],XmNpacking,XmPACK_TIGHT); argcount++;
4208 XtSetArg(args[argcount],XmNnumColumns,4);argcount++;
4209 XtSetArg(args[argcount],XmNorientation,XmHORIZONTAL);argcount++;
4210 rowcol2=XmCreateRowColumn(rowcol,"Edit Stations",args,argcount);
4211 
4212 argcount=0;
4213 XtSetArg(args[argcount], XmNbuttonCount, 1);argcount++;
4214 XtSetArg(args[argcount], XmNbuttons, olabels); argcount++;
4215 XtSetArg(args[argcount], XmNbuttonType, otypes); argcount++;
4216 rowcol3=XmCreateSimpleOptionMenu(rowcol2,"Edit Stations",args,argcount);
4217 
4218 XtSetArg(args[0],XmNsubMenuId,&widg);
4219 XtGetValues(rowcol3,args,1);
4220 
4221 s[0]="6 hour";
4222 
4223 for(i=0;i<1;i++) {
4224 
4225  pbutton=XtVaCreateManagedWidget(s[i],xmPushButtonGadgetClass,widg,NULL);
4226 
4227  }
4228 
4229 
4230 XtSetArg(args[0],XmNmenuHistory,pbutton);
4231 XtSetValues(rowcol3,args,1);
4232 
4233 argcount=0;
4234 XtSetArg(args[argcount],XmNarrowDirection,XmARROW_UP);argcount++;
4235 arrow1=XmCreateArrowButton(rowcol2,"up",args,argcount);
4236 XtAddCallback(arrow1,XmNactivateCallback,change_z_time,(XtPointer)0);
4237 
4238 argcount=0;
4239 XtSetArg(args[argcount],XmNarrowDirection,XmARROW_DOWN);argcount++;
4240 arrow2=XmCreateArrowButton(rowcol2,"down",args,argcount);
4241 XtAddCallback(arrow2,XmNactivateCallback,change_z_time,(XtPointer)1);
4242 
4243 XtManageChild(arrow1);
4244 XtManageChild(arrow2);
4245 
4246 argcount=0;
4247 XtSetArg(args[argcount], XmNbuttonCount, 1);argcount++;
4248 XtSetArg(args[argcount], XmNbuttons, olabels); argcount++;
4249 XtSetArg(args[argcount], XmNbuttonType, otypes); argcount++;
4250 rowcol1=XmCreateSimpleOptionMenu(rowcol,"Edit Stations",args,argcount);
4251 
4252 s[0]="Points";
4253 s[1]="Grids";
4254 s[2]="MAZs";
4255 s[3]="Points+Grids";
4256 s[4]="Points+MAZs";
4257 s[5]="None";
4258 
4259 XtSetArg(args[0],XmNsubMenuId,&widg);
4260 XtGetValues(rowcol1,args,1);
4261 
4262 for(i=0;i<6;i++) {
4263 
4264  diswidget[i]=XtVaCreateManagedWidget(s[i],xmPushButtonGadgetClass,widg,NULL);
4265  XtAddCallback(diswidget[i],XmNactivateCallback,display_pcpn_options,
4266  (XtPointer)i);
4267 
4268 
4269  time_pos=100+pcp_flag;
4270 
4271  if((i != 0 && i !=5) && pcp_in_use[time_pos]==-1)
4272  XtSetSensitive(diswidget[i],False);
4273 
4274 }
4275 
4276 if(points_flag==1 && pcp_in_use[time_pos]==-1)
4277  i=0;
4278 
4279 else if(points_flag==1 && grids_flag==-1 && map_flag==-1)
4280  i=0;
4281 
4282 else if(points_flag==-1 && grids_flag==1 && map_flag==-1)
4283  i=1;
4284 
4285 else if(points_flag==-1 && grids_flag==-1 && map_flag==1)
4286  i=2;
4287 
4288 else if(points_flag==1 && grids_flag==1 && map_flag==-1)
4289  i=3;
4290 
4291 else if(points_flag==1 && grids_flag==-1 && map_flag==1)
4292  i=4;
4293 
4294 else if(points_flag==-1 && grids_flag==-1 && map_flag==-1)
4295  i=5;
4296 
4297 i=0;
4298 
4299 XtSetArg(args[0],XmNmenuHistory,diswidget[i]);
4300 XtSetValues(rowcol1,args,1);
4301 
4302 argcount=0;
4303 XtSetArg(args[argcount],XmNpacking,XmPACK_TIGHT); argcount++;
4304 XtSetArg(args[argcount],XmNnumColumns,3);argcount++;
4305 XtSetArg(args[argcount],XmNorientation,XmHORIZONTAL);argcount++;
4306 rowcol4=XmCreateRowColumn(rowcol,"Edit Stations",args,argcount);
4307 
4308 argcount=0;
4309 
4310 rpbutton=XmCreatePushButton(rowcol4,"Render Grids+MAZs",args,argcount);
4311 XtAddCallback(rpbutton,XmNactivateCallback,other_pcpn_options,
4312  (XtPointer)2);
4313 
4314 XtManageChild(rpbutton);
4315 
4316 printf("time pos %d %d %d\n",time_pos,pcp_in_use[time_pos],zdata[i].used[pcpn_time]);
4317 
4318 if(pcp_in_use[time_pos]==-1 && zdata[i].used[pcpn_time]!=0)
4319  XtSetSensitive(rpbutton,True);
4320 else
4321  XtSetSensitive(rpbutton,False);
4322 
4323 t=XmStringCreateLocalized("Filter Z");
4324 argcount=0;
4325 XtSetArg(args[argcount],XmNlabelString,t);argcount++;
4326 XtSetArg(args[argcount], XmNbuttonCount, 1);argcount++;
4327 XtSetArg(args[argcount], XmNbuttons, olabels); argcount++;
4328 XtSetArg(args[argcount], XmNbuttonType, otypes); argcount++;
4329 rowcol16=XmCreateSimpleOptionMenu(rowcol,"Edit Stations",args,argcount);
4330 
4331 XtSetArg(args[0],XmNsubMenuId,&widg);
4332 XtGetValues(rowcol16,args,1);
4333 
4334 s[0]="Above";
4335 s[1]="Below";
4336 s[2]="All";
4337 
4338 for(i=0;i<3;i++) {
4339 
4340  abwidget[i]=XtVaCreateManagedWidget(s[i],xmPushButtonGadgetClass,widg,NULL);
4341  XtAddCallback(abwidget[i],XmNactivateCallback,change_abmode,
4342  (XtPointer)i);
4343  }
4344 
4345 if(abmode==0)
4346  i=0;
4347 
4348 else if(abmode==1)
4349  i=1;
4350 
4351 else
4352  i=2;
4353 
4354 XtSetArg(args[0],XmNmenuHistory,abwidget[i]);
4355 XtSetValues(rowcol16,args,1);
4356 
4357 XmStringFree(t);
4358 
4359 sep=XmCreateSeparator(rowcol,"swp",NULL,0);
4360 XtManageChild(sep);
4361 
4362 t=XmStringCreateLocalized("Point display");
4363 argcount=0;
4364 XtSetArg(args[argcount],XmNlabelString,t);argcount++;
4365 XtSetArg(args[argcount], XmNbuttonCount, 1);argcount++;
4366 XtSetArg(args[argcount], XmNbuttons, olabels); argcount++;
4367 XtSetArg(args[argcount], XmNbuttonType, otypes); argcount++;
4368 rowcol5=XmCreateSimpleOptionMenu(rowcol,"Edit Stations",args,argcount);
4369 
4370 XtSetArg(args[0],XmNsubMenuId,&widg);
4371 XtGetValues(rowcol5,args,1);
4372 
4373 s[0]="Handbook 5";
4374 s[1]="PC";
4375 s[2]="Name";
4376 s[3]="Data";
4377 
4378 plot_view=4;
4379 
4380 for(i=0;i<4;i++) {
4381 
4382  pbutton=XtVaCreateManagedWidget(s[i],xmPushButtonGadgetClass,widg,NULL);
4383  XtAddCallback(pbutton,XmNactivateCallback,change_plot,
4384  (XtPointer)(i+1));
4385 
4386  if(i==3)
4387  spbutton=pbutton;
4388  }
4389 
4390 XtSetArg(args[0],XmNmenuHistory,spbutton);
4391 XtSetValues(rowcol5,args,1);
4392 
4393 t=XmStringCreateLocalized("Pxtemp (Deg C)");
4394 argcount=0;
4395 XtSetArg(args[argcount],XmNminimum,-100);argcount++;
4396 XtSetArg(args[argcount],XmNmaximum,300);argcount++;
4397 XtSetArg(args[argcount],XmNdecimalPoints,2);argcount++;
4398 XtSetArg(args[argcount],XmNshowValue,True);argcount++;
4399 XtSetArg(args[argcount],XmNtitleString,t);argcount++;
4400 XtSetArg(args[argcount],XmNorientation,XmHORIZONTAL);argcount++;
4401 ival=(int)(pxtemp*100);
4402 XtSetArg(args[argcount],XmNvalue,ival);argcount++;
4403 scale=XmCreateScale(rowcol,"scale",args,argcount);
4404 XtManageChild(scale);
4405 XtAddCallback(scale,XmNvalueChangedCallback,new_dm,NULL);
4406 XmStringFree(t);
4407 
4408 XtManageChild(rowcol);
4409 XtManageChild(rowcol1);
4410 XtManageChild(rowcol2);
4411 XtManageChild(rowcol3);
4412 XtManageChild(rowcol4);
4413 XtManageChild(rowcol5);
4414 XtManageChild(rowcol16);
4415 
4416 XtManageChild(z_widget);
4417 change_pcpn_flag=-1;
4419 change_topo_flag=-1;
4420 change_frz_flag=1;
4422 get_legend();
4423 
4424 send_expose();
4425 
4426 return;
4427 
4428 }
4429 void screening_options(Widget w,XtPointer data,XmDrawingAreaCallbackStruct *call_data)
4430 
4431 {
4432 
4433 if((int)data==0)
4434  pdata[pcpn_day].stddev=5.0;
4435 
4436 else if((int)data==1)
4437  pdata[pcpn_day].stddev=3.0;
4438 
4439 else if((int)data==2)
4440  pdata[pcpn_day].stddev=1.0;
4441 
4442 if((int)data==0)
4443  tdata[pcpn_day].stddev=15.0;
4444 
4445 else if((int)data==1)
4446  tdata[pcpn_day].stddev=10.0;
4447 
4448 else if((int)data==2)
4449  tdata[pcpn_day].stddev=5.0;
4450 
4451 XDefineCursor(display,window,watch_cursor);
4452 XmUpdateDisplay(top_level);
4453 
4459 
4463 
4464 
4465 send_expose();
4466 
4467 }
4468 
4469 void change_pcpn_time(Widget w,XtPointer data,XmDrawingAreaCallbackStruct *call_data)
4470 
4471 {
4472 
4473 int time_pos,i;
4474 Arg args[10];
4475 time_t tget;
4476 struct tm *gm;
4477 
4478 /* 24 hour or 6 hour time step */
4479 
4480 if(pcpn_time_step==0)
4481  time_pos=pcpn_time;
4482 
4483 else
4484  time_pos=4;
4485 
4486 if((int)data==2 && pcpn_time_step==0)
4487  return;
4488 
4489 else if((int)data==2 && pcpn_time_step==1) {
4490 
4491  pcpn_time_step=0;
4492  pcp_flag=3+pcpn_day*4;
4493 
4494 
4495  }
4496 
4497 else if((int)data==3 && pcpn_time_step==1)
4498  return;
4499 
4500 else if((int)data==3 && pcpn_time_step==0) {
4501 
4502  pcpn_time_step=1;
4503 
4504  if(rsmode==0) {
4505 
4506  change_rpcpn_flag=-1;
4507  change_pcpn_flag=1;
4508  rsmode=1;
4509  get_legend();
4510 
4511  }
4512 
4513 
4514  }
4515 
4516 /* backward or forward */
4517 
4518 if((int)data==0) {
4519 
4520  if(pcpn_time_step==0)
4521  pcp_flag--;
4522 
4523  else
4524  pcp_flag=pcp_flag-4;
4525 
4526  }
4527 
4528 else if((int)data==1) {
4529 
4530  if(pcpn_time_step==0)
4531  pcp_flag++;
4532 
4533  else
4534  pcp_flag=pcp_flag+4;
4535 
4536  }
4537 
4538 if(pcp_flag < 0)
4539  pcp_flag=0;
4540 
4541 if(pcp_flag >= maxdays*4)
4542  pcp_flag=maxdays*4-1;
4543 
4544 
4545 pcpn_day=pcp_flag/4;
4546 
4548 
4549 if(pcpn_time_step==0)
4550  time_pos=pcp_flag;
4551 
4552 else
4553  time_pos=40+pcpn_day;
4554 
4555 for(i=1;i<5;i++)
4556  XtSetSensitive(diswidget[i],True);
4557 
4558 if(pcp_in_use[time_pos]==-1) {
4559 
4560  for(i=1;i<5;i++)
4561  XtSetSensitive(diswidget[i],False);
4562 
4563  }
4564 
4565 if(points_flag==1 && pcp_in_use[time_pos]==-1)
4566  i=0;
4567 
4568 else if(points_flag==1 && grids_flag==-1 && map_flag==-1)
4569  i=0;
4570 
4571 else if(points_flag==-1 && grids_flag==1 && map_flag==-1)
4572  i=1;
4573 
4574 else if(points_flag==-1 && grids_flag==-1 && map_flag==1)
4575  i=2;
4576 
4577 else if(points_flag==1 && grids_flag==1 && map_flag==-1)
4578  i=3;
4579 
4580 else if(points_flag==1 && grids_flag==-1 && map_flag==1)
4581  i=4;
4582 
4583 else if(points_flag==-1 && grids_flag==-1 && map_flag==-1)
4584  i=5;
4585 
4586 XtSetArg(args[0],XmNmenuHistory,diswidget[i]);
4587 XtSetValues(rowcol1,args,1);
4588 
4589 if(pdata[pcpn_day].stddev==5.0)
4590  i=0;
4591 
4592 else if(pdata[pcpn_day].stddev==3.0)
4593  i=1;
4594 
4595 else
4596  i=2;
4597 
4598 XtSetArg(args[0],XmNmenuHistory,scwidget[i]);
4599 XtSetValues(rowcol10,args,1);
4600 
4601 if(pcp_in_use[time_pos]==-1 &&
4602  ((pcpn_time_step==1 && pdata[pcpn_day].used[4]!=0) ||
4603  pcpn_time_step==0 && pdata[pcpn_day].used[pcpn_time] != 0))
4604  XtSetSensitive(rpbutton,True);
4605 
4606 else
4607  XtSetSensitive(rpbutton,False);
4608 
4609 time_pos=100+pcp_flag;
4610 
4611 if(pcpn_time_step==1) {
4612 
4613  for(i=0;i<1;i++)
4614  XtSetSensitive(rswidget[i],False);
4615 
4616  XtSetArg(args[0],XmNmenuHistory,rswidget[1]);
4617  XtSetValues(rowcol15,args,1);
4618 
4619  }
4620 
4621 else {
4622 
4623 
4624  if((pcp_flag !=0 && (pcp_in_use[time_pos] == 1 ||
4625  pcp_in_use[time_pos-1] == 1))
4626  || (pcp_flag==0 && pcp_in_use[time_pos] != -1)) {
4627 
4628 
4629  for(i=0;i<1;i++)
4630  XtSetSensitive(rswidget[i],True);
4631 
4632  XtSetArg(args[0],XmNmenuHistory,rswidget[rsmode]);
4633  XtSetValues(rowcol15,args,1);
4634 
4635  }
4636 
4637  else {
4638 
4639  for(i=0;i<1;i++)
4640  XtSetSensitive(rswidget[i],False);
4641 
4642  XtSetArg(args[0],XmNmenuHistory,rswidget[1]);
4643  XtSetValues(rowcol15,args,1);
4644 
4645 
4646 
4647  }
4648 
4649  }
4650 
4651 
4652 tget=btim-pcpn_day*86400;
4653 
4654 gm=gmtime(&tget);
4655 
4656 isom=gm->tm_mon;
4657 
4658 send_expose();
4659 
4660 }
4661 
4662 void change_maxmin_time(Widget w,XtPointer data,XmDrawingAreaCallbackStruct *call_data)
4663 
4664 {
4665 
4666 int time_pos,i;
4667 Arg args[10];
4668 time_t tget;
4669 struct tm *gm;
4670 
4671 /* 24 hour or 6 hour time step */
4672 
4673 if(pcpn_time_step==0)
4674  time_pos=pcpn_time;
4675 
4676 else
4677  time_pos=4;
4678 
4679 if((int)data==2 && pcpn_time_step==0)
4680  return;
4681 
4682 else if((int)data==2 && pcpn_time_step!=0) {
4683 
4684  pcpn_time_step=0;
4685  pcp_flag=3+pcpn_day*4;
4686 
4687 
4688  }
4689 
4690 else if((int)data==3 && pcpn_time_step==1)
4691  return;
4692 
4693 else if((int)data==3 && pcpn_time_step!=1) {
4694 
4695  pcpn_time_step=1;
4696 
4697 
4698  }
4699 
4700 else if((int)data==4 && pcpn_time_step==2)
4701  return;
4702 
4703 else if((int)data==4 && pcpn_time_step!=2) {
4704 
4705  pcpn_time_step=2;
4706 
4707 
4708  }
4709 
4710 /* backward or forward */
4711 
4712 if((int)data==0) {
4713 
4714  if(pcpn_time_step==0)
4715  pcp_flag--;
4716 
4717  else
4718  pcp_flag=pcp_flag-4;
4719 
4720  }
4721 
4722 else if((int)data==1) {
4723 
4724  if(pcpn_time_step==0)
4725  pcp_flag++;
4726 
4727  else
4728  pcp_flag=pcp_flag+4;
4729 
4730  }
4731 
4732 if(pcp_flag < 0)
4733  pcp_flag=0;
4734 
4735 if(pcp_flag >= maxdays*4)
4736  pcp_flag=maxdays*4-1;
4737 
4738 
4739 pcpn_day=pcp_flag/4;
4740 
4742 
4743 if(pcpn_time_step==0)
4744  time_pos=150+pcp_flag;
4745 
4746 else if(pcpn_time_step==1)
4747  time_pos=190+pcpn_day;
4748 
4749 else if(pcpn_time_step==2)
4750  time_pos=200+pcpn_day;
4751 
4752 for(i=1;i<5;i++)
4753  XtSetSensitive(diswidget[i],True);
4754 
4755 if(pcp_in_use[time_pos]==-1) {
4756 
4757  for(i=1;i<5;i++)
4758  XtSetSensitive(diswidget[i],False);
4759 
4760  }
4761 
4762 if(points_flag==1 && pcp_in_use[time_pos]==-1)
4763  i=0;
4764 
4765 else if(points_flag==1 && grids_flag==-1 && map_flag==-1)
4766  i=0;
4767 
4768 else if(points_flag==-1 && grids_flag==1 && map_flag==-1)
4769  i=1;
4770 
4771 else if(points_flag==-1 && grids_flag==-1 && map_flag==1)
4772  i=2;
4773 
4774 else if(points_flag==1 && grids_flag==1 && map_flag==-1)
4775  i=3;
4776 
4777 else if(points_flag==1 && grids_flag==-1 && map_flag==1)
4778  i=4;
4779 
4780 else if(points_flag==-1 && grids_flag==-1 && map_flag==-1)
4781  i=5;
4782 
4783 XtSetArg(args[0],XmNmenuHistory,diswidget[i]);
4784 XtSetValues(rowcol1,args,1);
4785 
4786 if(pdata[pcpn_day].stddev==5.0)
4787  i=0;
4788 
4789 else if(pdata[pcpn_day].stddev==3.0)
4790  i=1;
4791 
4792 else
4793  i=2;
4794 
4795 XtSetArg(args[0],XmNmenuHistory,scwidget[i]);
4796 XtSetValues(rowcol10,args,1);
4797 
4798 if(pcp_in_use[time_pos]==-1 &&
4799  ((pcpn_time_step==1 && tdata[pcpn_day].used[4]!=0) ||
4800  (pcpn_time_step==2 && tdata[pcpn_day].used[5]!=0) ||
4801  pcpn_time_step==0 && tdata[pcpn_day].used[pcpn_time] != 0))
4802  XtSetSensitive(rpbutton,True);
4803 
4804 else
4805  XtSetSensitive(rpbutton,False);
4806 
4807 tget=btim-pcpn_day*86400;
4808 
4809 gm=gmtime(&tget);
4810 
4811 isom=gm->tm_mon;
4812 
4813 send_expose();
4814 
4815 }
4816 void change_z_time(Widget w,XtPointer data,XmDrawingAreaCallbackStruct
4817 *call_data)
4818 
4819 {
4820 
4821 int time_pos,i;
4822 Arg args[10];
4823 time_t tget;
4824 struct tm *gm;
4825 
4826 /* 24 hour or 6 hour time step */
4827 
4828 if((int)data==0)
4829  pcp_flag--;
4830 
4831 else if((int)data==1)
4832  pcp_flag++;
4833 
4834 if(pcp_flag < 0)
4835  pcp_flag=0;
4836 
4837 if(pcp_flag >= maxdays*4)
4838  pcp_flag=maxdays*4-1;
4839 
4840 
4841 pcpn_day=pcp_flag/4;
4842 
4844 
4845 time_pos=100+pcp_flag;
4846 
4847 for(i=1;i<5;i++)
4848  XtSetSensitive(diswidget[i],True);
4849 
4850 if(pcp_in_use[time_pos]==-1) {
4851 
4852  for(i=1;i<5;i++)
4853  XtSetSensitive(diswidget[i],False);
4854 
4855  }
4856 
4857 if(points_flag==1 && pcp_in_use[time_pos]==-1)
4858  i=0;
4859 
4860 else if(points_flag==1 && grids_flag==-1 && map_flag==-1)
4861  i=0;
4862 
4863 else if(points_flag==-1 && grids_flag==1 && map_flag==-1)
4864  i=1;
4865 
4866 else if(points_flag==-1 && grids_flag==-1 && map_flag==1)
4867  i=2;
4868 
4869 else if(points_flag==1 && grids_flag==1 && map_flag==-1)
4870  i=3;
4871 
4872 else if(points_flag==1 && grids_flag==-1 && map_flag==1)
4873  i=4;
4874 
4875 else if(points_flag==-1 && grids_flag==-1 && map_flag==-1)
4876  i=5;
4877 
4878 XtSetArg(args[0],XmNmenuHistory,diswidget[i]);
4879 XtSetValues(rowcol1,args,1);
4880 
4881 if(pcp_in_use[time_pos]==-1 &&
4882  pdata[pcpn_day].used[pcpn_time] != 0)
4883  XtSetSensitive(rpbutton,True);
4884 
4885 else
4886  XtSetSensitive(rpbutton,False);
4887 
4888 tget=btim-pcpn_day*86400;
4889 
4890 gm=gmtime(&tget);
4891 
4892 isom=gm->tm_mon;
4893 
4894 send_expose();
4895 
4896 }
4897 
4898 void display_pcpn_options(Widget w,XtPointer data,XmDrawingAreaCallbackStruct *call_data)
4899 {
4900 
4901 Arg args[10];
4902 
4904 
4905 if((int)data==0) {
4906 
4907  points_flag=1;
4908 
4909 
4910  }
4911 
4912 if((int)data==1) {
4913 
4914  grids_flag=1;
4915 
4916 
4917  }
4918 
4919 else if((int)data==2) {
4920 
4921  map_flag=1;
4922 
4923 
4924  }
4925 
4926 else if((int)data==3) {
4927 
4928  points_flag=1;
4929  grids_flag=1;
4930 
4931  }
4932 
4933 else if((int)data==4) {
4934 
4935  points_flag=1;
4936  map_flag=1;
4937 
4938  }
4939 
4940 
4941 else if((int)data==5) {
4942 
4943  points_flag=-1;
4944  grids_flag=-1;
4945  map_flag=-1;
4946 
4947  }
4948 
4949 send_expose();
4950 
4951 }
4952 void other_pcpn_options(Widget w,XtPointer data,XmDrawingAreaCallbackStruct *call_data)
4953 {
4954 
4955 Cardinal argcount;
4956 Arg args[10];
4957 XmString t;
4958 int num,time_pos;
4959 int m;
4960 time_t old_time;
4961 char dbuf[1000];
4962 struct tm *gm;
4963 int k;
4964 
4965 if((int)data==1) {
4966 
4967  t=XmStringCreateLocalized("Enter handbook 5 I.D.");
4968 
4969  argcount=0;
4970 
4971  XtSetArg(args[argcount],XmNselectionLabelString,t);argcount++;
4972 
4973  XtSetArg(args[argcount],XmNautoUnmanage,False);argcount++;
4974  find_widget=XmCreatePromptDialog(drawing_area,"find station",
4975  args,argcount);
4976 
4977  XtUnmanageChild(XmSelectionBoxGetChild(find_widget,
4978  XmDIALOG_HELP_BUTTON));
4979 
4980  XtAddCallback(find_widget,XmNokCallback,find_name,(XtPointer)0);
4981 
4982  XtAddCallback(find_widget,XmNcancelCallback,find_name,(XtPointer)1);
4983 
4984  XtManageChild(find_widget);
4985 
4986  XmStringFree(t);
4987 
4988  return;
4989 
4990  }
4991 
4992 else if((int)data==0){
4993 
4994  bmessage(w,"Gridding precipitation and building MAPs");
4995 
4997 
4999 
5001 
5003 
5004  if(pdata[pcpn_day].used[4] != 0) {
5005 
5007 
5008  old_time=pdata[pcpn_day].data_time;
5009 
5010  gm=gmttime(&old_time);
5011 
5012  sprintf(dbuf,"%s%02d-%02d-%02d.%s",grid_file,
5013  gm->tm_mon+1,gm->tm_mday,gm->tm_year,timefile[4]);
5014 
5015  write_qpf_grids(dbuf);
5016 
5017  make_map(40+pcpn_day);
5018 
5019 
5020  }
5021 
5022 
5023  for(m=0;m<4;m++) {
5024 
5025  if(pdata[pcpn_day].used[m]==0)
5026  continue;
5027 
5028  render_pcp(pcpn_day,m,0);
5029 
5030  if(m < 2)
5031  old_time=pdata[pcpn_day].data_time-86400;
5032 
5033  else
5034  old_time=pdata[pcpn_day].data_time;
5035 
5036  gm=gmttime(&old_time);
5037 
5038  sprintf(dbuf,"%s%02d-%02d-%02d.%s",grid_file,
5039  gm->tm_mon+1,gm->tm_mday,gm->tm_year,timefile[m]);
5040 
5041  write_qpf_grids(dbuf);
5042 
5043  num=4*pcpn_day+3-m;
5044 
5045  make_map(num);
5046 
5047  pdata[pcpn_day].used[m]=3;
5048 
5049  }
5050 
5051 
5053 
5055 
5056  pdata[pcpn_day].used[4]=3;
5057 
5058  for(k=1;k<5;k++)
5059  XtSetSensitive(diswidget[k],True);
5060 
5061  if(pcpn_time_step==0)
5062  time_pos=pcp_flag;
5063 
5064  else
5065  time_pos=40+pcpn_day;
5066 
5067  if(points_flag==1 && pcp_in_use[time_pos]==-1)
5068  k=0;
5069 
5070  else if(points_flag==1 && grids_flag==-1 && map_flag==-1)
5071  k=0;
5072 
5073  else if(points_flag==-1 && grids_flag==1 && map_flag==-1)
5074  k=1;
5075 
5076  else if(points_flag==-1 && grids_flag==-1 && map_flag==1)
5077  k=2;
5078 
5079  else if(points_flag==1 && grids_flag==1 && map_flag==-1)
5080  k=3;
5081 
5082  else if(points_flag==1 && grids_flag==-1 && map_flag==1)
5083  k=4;
5084 
5085  else if(points_flag==-1 && grids_flag==-1 && map_flag==-1)
5086  k=5;
5087 
5088  XtSetArg(args[0],XmNmenuHistory,diswidget[k]);
5089  XtSetValues(rowcol1,args,1);
5090 
5091 }
5092 
5093 else if((int)data==2){
5094 
5095  bmessage(w,"Gridding freezing level and building MAZs");
5096 
5097  for(m=0;m<4;m++) {
5098 
5099  if(zdata[pcpn_day].used[m]==0 ||
5100  zdata[pcpn_day].used[m]==3 ||
5101  (zdata[pcpn_day].used[m]==1 && zdata[pcpn_day].level[m]==2) ||
5102  zdata[pcpn_day].used[m]==4)
5103  continue;
5104 
5105  render_z(pcpn_day,m,0);
5106 
5107  if(m < 2)
5108  old_time=zdata[pcpn_day].data_time-86400;
5109 
5110  else
5111  old_time=zdata[pcpn_day].data_time;
5112 
5113  gm=gmttime(&old_time);
5114 
5115  sprintf(dbuf,"%s%02d-%02d-%02d.%s",zgrid_file,
5116  gm->tm_mon+1,gm->tm_mday,gm->tm_year,ztimefile[m]);
5117 
5118  write_qpf_grids(dbuf);
5119 
5120  num=100+4*pcpn_day+3-m;
5121 
5122  zdata[pcpn_day].used[m]=3;
5123 
5124  make_rsel(num,num-100);
5125 
5126  }
5127 
5128  for(k=1;k<5;k++)
5129  XtSetSensitive(diswidget[k],True);
5130 
5131  time_pos=100+pcp_flag;
5132 
5133  if(points_flag==1 && pcp_in_use[time_pos]==-1)
5134  k=0;
5135 
5136  else if(points_flag==1 && grids_flag==-1 && map_flag==-1)
5137  k=0;
5138 
5139  else if(points_flag==-1 && grids_flag==1 && map_flag==-1)
5140  k=1;
5141 
5142  else if(points_flag==-1 && grids_flag==-1 && map_flag==1)
5143  k=2;
5144 
5145  else if(points_flag==1 && grids_flag==1 && map_flag==-1)
5146  k=3;
5147 
5148  else if(points_flag==1 && grids_flag==-1 && map_flag==1)
5149  k=4;
5150 
5151  else if(points_flag==-1 && grids_flag==-1 && map_flag==-1)
5152  k=5;
5153 
5154  XtSetArg(args[0],XmNmenuHistory,diswidget[k]);
5155  XtSetValues(rowcol1,args,1);
5156 
5157 }
5158 
5159 else if((int)data==3){
5160 
5161  bmessage(w,"Gridding temperature and building MATs");
5162 
5164 
5166 
5167  if(tdata[pcpn_day].used[4] != 0) {
5168 
5169  render_t(pcpn_day,pcpn_time,1);
5170 
5171  old_time=tdata[pcpn_day].data_time;
5172 
5173  gm=gmttime(&old_time);
5174 
5175  sprintf(dbuf,"%s%02d-%02d-%02d.%s",tgrid_file,
5176  gm->tm_mon+1,gm->tm_mday,gm->tm_year,ttimefile[4]);
5177 
5178  write_qpf_grids(dbuf);
5179 
5180  tdata[pcpn_day].used[4]=3;
5181 
5182  }
5183 
5184  if(tdata[pcpn_day].used[5] != 0) {
5185 
5186  render_t(pcpn_day,pcpn_time,2);
5187 
5188  old_time=tdata[pcpn_day].data_time;
5189 
5190  gm=gmttime(&old_time);
5191 
5192  sprintf(dbuf,"%s%02d-%02d-%02d.%s",tgrid_file,
5193  gm->tm_mon+1,gm->tm_mday,gm->tm_year,ttimefile[5]);
5194 
5195  write_qpf_grids(dbuf);
5196 
5197  tdata[pcpn_day].used[5]=3;
5198 
5199  }
5200 
5201  for(m=0;m<4;m++) {
5202 
5203  if(tdata[pcpn_day].used[m]==0 ||
5204  tdata[pcpn_day].used[m]==3 ||
5205  (tdata[pcpn_day].used[m]==1 && tdata[pcpn_day].level[m]==2) ||
5206  tdata[pcpn_day].used[m]==4)
5207  continue;
5208 
5209  render_t6(pcpn_day,m,0);
5210 
5211  if(m < 2)
5212  old_time=tdata[pcpn_day].data_time-86400;
5213 
5214  else
5215  old_time=tdata[pcpn_day].data_time;
5216 
5217  gm=gmttime(&old_time);
5218 
5219  sprintf(dbuf,"%s%02d-%02d-%02d.%s",tgrid_file,
5220  gm->tm_mon+1,gm->tm_mday,gm->tm_year,ttimefile[m]);
5221 
5222  write_qpf_grids(dbuf);
5223 
5224  num=150+4*pcpn_day+3-m;
5225 
5226  tdata[pcpn_day].used[m]=3;
5227 
5228  make_mat(num,num-150);
5229 
5230  tdata[pcpn_day].used[m]=3;
5231 
5232  }
5233 
5235 
5237 
5238  for(k=1;k<5;k++)
5239  XtSetSensitive(diswidget[k],True);
5240  time_pos=150+pcp_flag;
5241 
5242  if(points_flag==1 && pcp_in_use[time_pos]==-1)
5243  k=0;
5244 
5245  else if(points_flag==1 && grids_flag==-1 && map_flag==-1)
5246  k=0;
5247 
5248  else if(points_flag==-1 && grids_flag==1 && map_flag==-1)
5249  k=1;
5250 
5251  else if(points_flag==-1 && grids_flag==-1 && map_flag==1)
5252  k=2;
5253 
5254  else if(points_flag==1 && grids_flag==1 && map_flag==-1)
5255  k=3;
5256 
5257  else if(points_flag==1 && grids_flag==-1 && map_flag==1)
5258  k=4;
5259 
5260  else if(points_flag==-1 && grids_flag==-1 && map_flag==-1)
5261  k=5;
5262 
5263  XtSetArg(args[0],XmNmenuHistory,diswidget[k]);
5264  XtSetValues(rowcol1,args,1);
5265 
5266 }
5267 
5268 send_expose();
5269 
5270 XtSetSensitive(rpbutton,False);
5271 
5272 XtDestroyWidget(err);
5273 
5274 }
5275 
5276 void find_name(Widget w,XtPointer data,XmDrawingAreaCallbackStruct *call_data)
5277 
5278 {
5279 
5280 XmString str;
5281 char *cstr;
5282 int ib,x1,y1,MY=10;
5283 signed long XSIZE,YSIZE;
5284 Cardinal argcount;
5285 Arg args[10];
5286 float lat,lon,xrat,yrat,mult,cmult,dmult;
5287 long r,s;
5288 float conv=.0174;
5289 long xmin,ymin;
5290 Dimension width,height;
5291 char dbuf[500];
5292 
5293 if((int)data==1) {
5294 
5295  XtDestroyWidget(find_widget);
5296  return;
5297 
5298  }
5299 
5300 
5301 argcount=0;
5302 XtSetArg(args[argcount],XmNtextString,&str);argcount++;
5303 XtGetValues(find_widget,args,argcount);
5304 
5305 XmStringGetLtoR(str,XmFONTLIST_DEFAULT_TAG,&cstr);
5306 if(cstr[0]==0)
5307  return;
5308 
5309 XtSetArg(args[0],XtNwidth,&width);
5310 XtSetArg(args[1],XtNheight,&height);
5311 XtGetValues(drawing_area,args,2);
5312 
5313 XSIZE=(long)width*10L;
5314 YSIZE=(long)height*10L;
5315 
5316 xrat=(float)XSIZE/(float)12800;
5317 yrat=(float)YSIZE/(float)9600;
5318 
5319 if(xrat < yrat)
5320  mult=xrat;
5321 
5322 else
5323  mult=yrat;
5324 
5325 dmult=display_set[display_flag].dmult[0];
5326 xmin= display_set[display_flag].xmin[0];
5327 ymin= display_set[display_flag].ymin[0];
5328 cmult=mult*dmult;
5329 
5330 XSIZE=(display_set[display_flag].xmax[0]-
5331  display_set[display_flag].xmin[0])/10;
5332 YSIZE=(display_set[display_flag].ymax[0]-
5333  display_set[display_flag].ymin[0])/10;
5334 
5335 for(ib=0;ib<max_stations;ib++) {
5336 
5337  if(strcasecmp(cstr,station[ib].hb5)==0) {
5338 
5339  lat=station[ib].lat;
5340  lon=station[ib].lon;
5341 
5342  r=dval.a * cos(lat*conv)/(1+sin(lat*conv))
5343  * cos((lon-dval.lo-90)*conv) + dval.xo +.5;
5344 
5345  s=dval.a * cos(lat*conv)/(1+sin(lat*conv))
5346  * sin((lon-dval.lo-90)*conv) + dval.yo + .5;
5347 
5348  x1=(xmin+(float)r * cmult)/MY;
5349  y1=(ymin+(float)s * cmult)/MY;
5350 
5351  zoom=1;
5352 
5353  opoint[0]=XSIZE/2;
5354  opoint[1]=YSIZE/2;
5355 
5356  XtDestroyWidget(find_widget);
5357 
5358  find_station_flag=ib;
5359 
5360  redraw_map(x1,y1,Button1);
5361 
5362  return;
5363 
5364 
5365 
5366  }
5367 
5368  }
5369 
5370 strcpy(dbuf,cstr);
5371 strcat(dbuf," not found");
5372 berror(find_widget,dbuf);
5373 
5374 }
5375 void change_character(Widget w,XtPointer data,XmDrawingAreaCallbackStruct *call_data)
5376 {
5377 
5378 
5379 if((int)data==2) {
5380 
5381  gage_char[0]=1;
5382  gage_char[1]=1;
5383 
5384  }
5385 
5386 else if((int)data==0) {
5387  gage_char[0]=1;
5388  gage_char[1]=-1;
5389 
5390  }
5391 
5392 else if((int)data==1) {
5393 
5394  gage_char[0]=-1;
5395  gage_char[1]=1;
5396 
5397  }
5398 
5399 send_expose();
5400 
5401 }
5402 
5403 void change_rsmode(Widget w,XtPointer data,XmDrawingAreaCallbackStruct
5404 *call_data)
5405 {
5406 
5407 rsmode=(int)data;
5408 
5409 change_pcpn_flag=-1;
5411 
5412 if(rsmode==0)
5414 
5415 else
5416  change_pcpn_flag=1;
5417 
5418 get_legend();
5419 
5420 send_expose();
5421 
5422 }
5423 
5424 void change_tcmode(Widget w,XtPointer data,XmDrawingAreaCallbackStruct
5425 *call_data)
5426 {
5427 
5428 tcmode=(int)data;
5429 
5430 send_expose();
5431 
5432 }
5433 
5434 void change_dcmode(Widget w,XtPointer data,XmDrawingAreaCallbackStruct
5435 *call_data)
5436 {
5437 
5438 dcmode=(int)data;
5439 
5440 send_expose();
5441 
5442 }
5443 
5444 void change_abmode(Widget w,XtPointer data,XmDrawingAreaCallbackStruct
5445 *call_data)
5446 {
5447 
5448 abmode=(int)data;
5449 
5450 send_expose();
5451 
5452 }
5453 void change_pcp_scaling_mode(Widget w,XtPointer data,XmDrawingAreaCallbackStruct *call_data)
5454 {
5455 
5456 method=(int)data;
5457 
5458 }
5459 void change_pcpn_zoom_mode(Widget w,XtPointer data,XmDrawingAreaCallbackStruct *call_data)
5460 
5461 {
5462 
5463 Cardinal argcount;
5464 Arg args[10];
5465 Widget rowcol,pbutton;
5466 char *st[5];
5467 int i;
5468 
5469 group_edit=1;
5470 
5471 argcount=0;
5472 XtSetArg(args[argcount],XmNdeleteResponse,XmDO_NOTHING);argcount++;
5473 XtSetArg(args[argcount],XmNautoUnmanage,False);argcount++;
5474 XtSetArg(args[argcount],XmNwidth, 300);argcount++;
5475 XtSetArg(args[argcount],XmNheight,200);argcount++;
5476 
5477 if((int)data==0)
5478 group_dialog=XmCreateMessageDialog(pcpn_widget,"Group edit Stations",args,argcount);
5479 
5480 if((int)data==1)
5481 group_dialog=XmCreateMessageDialog(maxmin_widget,"Group edit Stations",args,argcount);
5482 
5483 XtUnmanageChild(XmMessageBoxGetChild(group_dialog,XmDIALOG_CANCEL_BUTTON));
5484 XtUnmanageChild(XmMessageBoxGetChild(group_dialog,XmDIALOG_HELP_BUTTON));
5485 XtUnmanageChild(XmMessageBoxGetChild(group_dialog,XmDIALOG_SEPARATOR));
5486 
5487 if((int)data==0)
5488  XtAddCallback(group_dialog,XmNokCallback,apply_group,NULL);
5489 
5490 if((int)data==1)
5491  XtAddCallback(group_dialog,XmNokCallback,apply_tgroup,NULL);
5492 
5493 argcount=0;
5494 XtSetArg(args[argcount],XmNpacking,XmPACK_COLUMN); argcount++;
5495 XtSetArg(args[argcount],XmNnumColumns,2);argcount++;
5496 XtSetArg(args[argcount],XmNorientation,XmVERTICAL);argcount++;
5497 
5498 rowcol=XmCreateRadioBox(group_dialog,"Edit Stations",args,argcount);
5499 
5500 st[0]="Verified";
5501 st[1]="Screened (Force)";
5502 st[2]="Questionable";
5503 st[3]="Bad";
5504 
5505 for(i=0;i<4;i++) {
5506 
5507  argcount=0;
5508  XtSetArg(args[argcount],XmNselectColor,cmap[4]);argcount++;
5509 
5510  if(func[i]==group_qual)
5511  XtSetArg(args[argcount],XmNset,True);
5512 
5513  else
5514  XtSetArg(args[argcount],XmNset,False);
5515 
5516  argcount++;
5517 
5518  pbutton=XmCreateToggleButton(rowcol,st[i],args,argcount);
5519  XtAddCallback(pbutton,XmNvalueChangedCallback,change_group_qual,
5520  (XtPointer)(i));
5521 
5522  XtManageChild(pbutton);
5523 
5524  }
5525 
5526 XtManageChild(rowcol);
5527 XtManageChild(group_dialog);
5528 XtSetSensitive(gpbutton,False);
5529 
5530 }
5531 
5532 
5533 
5534 void change_group_qual(Widget w,XtPointer data,XtPointer junk)
5535 {
5536 
5537 group_qual=func[(int)data];
5538 
5539 
5540 }
5541 
5542 
5544 
5545 {
5546 
5547 int k,time_pos;
5548 Cardinal argcount;
5549 Arg args[10];
5550 
5551 for(k=0;k<5;k++) {
5552 
5553  if(k < 4)
5554  time_pos=pcpn_day*4 +k;
5555 
5556  else
5557  time_pos=40+pcpn_day;
5558 
5559  pcp_in_use[time_pos]=-1;
5560 
5561 
5562  if(pdata[pcpn_day].used[k]!=0)
5563  pdata[pcpn_day].used[k]=2;
5564  }
5565 
5566 for(k=1;k<5;k++)
5567  XtSetSensitive(diswidget[k],False);
5568 
5569 if(pcpn_time_step==0)
5570  time_pos=pcp_flag;
5571 
5572 else
5573  time_pos=40+pcpn_day;
5574 
5575 if(points_flag==1 && pcp_in_use[time_pos]==-1)
5576  k=0;
5577 
5578 else if(points_flag==1 && grids_flag==-1 && map_flag==-1)
5579  k=0;
5580 
5581 else if(points_flag==-1 && grids_flag==1 && map_flag==-1)
5582  k=1;
5583 
5584 else if(points_flag==-1 && grids_flag==-1 && map_flag==1)
5585  k=2;
5586 
5587 else if(points_flag==1 && grids_flag==1 && map_flag==-1)
5588  k=3;
5589 
5590 else if(points_flag==1 && grids_flag==-1 && map_flag==1)
5591  k=4;
5592 
5593 else if(points_flag==-1 && grids_flag==-1 && map_flag==-1)
5594  k=5;
5595 
5596 XtSetArg(args[0],XmNmenuHistory,diswidget[k]);
5597 XtSetValues(rowcol1,args,1);
5598 
5600 
5602 
5604 
5606 
5608 
5610 
5611 XtDestroyWidget(group_dialog);
5612 
5613 write_screen();
5614 
5615 group_edit=0;
5616 
5617 XtSetSensitive(gpbutton,True);
5618 
5619 return;
5620 
5621 }
5622 
5624 
5625 {
5626 
5627 int k,time_pos;
5628 Cardinal argcount;
5629 Arg args[10];
5630 
5631 printf("start\n");
5632 
5633 if(pcpn_time_step==1) {
5634 
5635  if(tdata[pcpn_day].used[4]!=0)
5636  tdata[pcpn_day].used[4]=2;
5637 
5638  pcp_in_use[190+pcpn_day]=-1;
5639 
5640  }
5641 
5642 else if(pcpn_time_step==2) {
5643 
5644  if(tdata[pcpn_day].used[5]!=0)
5645  tdata[pcpn_day].used[5]=2;
5646 
5647  pcp_in_use[200+pcpn_day]=-1;
5648 
5649  }
5650 
5651 else {
5652 
5653  if(tdata[pcpn_day].used[pcpn_time]!=0)
5655 
5656  pcp_in_use[150+pcp_flag]=-1;
5657 
5658  }
5659 
5660 printf("start1\n");
5661 
5662 if(pcpn_time_step==1 || pcpn_time_step==2) {
5663 
5664 for(k=0;k<4;k++) {
5665 
5666  time_pos=150+pcpn_day*4 + k;
5667 
5668  pcp_in_use[time_pos]=-1;
5669 
5670  if(tdata[pcpn_day].used[k]!=0)
5671  tdata[pcpn_day].used[k]=2;
5672 
5673  }
5674 
5675 }
5676 
5677 for(k=1;k<5;k++)
5678  XtSetSensitive(diswidget[k],False);
5679 
5680 if(pcpn_time_step==0)
5681  time_pos=150+pcp_flag;
5682 
5683 else if(pcpn_time_step==1)
5684  time_pos=190+pcpn_day;
5685 
5686 else if(pcpn_time_step==2)
5687  time_pos=200+pcpn_day;
5688 
5689 if(points_flag==1 && pcp_in_use[time_pos]==-1)
5690  k=0;
5691 
5692 else if(points_flag==1 && grids_flag==-1 && map_flag==-1)
5693  k=0;
5694 
5695 else if(points_flag==-1 && grids_flag==1 && map_flag==-1)
5696  k=1;
5697 
5698 else if(points_flag==-1 && grids_flag==-1 && map_flag==1)
5699  k=2;
5700 
5701 else if(points_flag==1 && grids_flag==1 && map_flag==-1)
5702  k=3;
5703 
5704 else if(points_flag==1 && grids_flag==-1 && map_flag==1)
5705  k=4;
5706 
5707 else if(points_flag==-1 && grids_flag==-1 && map_flag==-1)
5708  k=5;
5709 
5710 XtSetArg(args[0],XmNmenuHistory,diswidget[k]);
5711 XtSetValues(rowcol1,args,1);
5712 
5714 
5716 
5718 
5720 
5721 XtDestroyWidget(group_dialog);
5722 
5723 write_screen();
5724 
5725 group_edit=0;
5726 
5727 XtSetSensitive(gpbutton,True);
5728 
5729 return;
5730 
5731 }
5732 
5733 void change_pcpn_edit_mode(Widget w,XtPointer data,XtPointer junk)
5734 
5735 {
5736 
5737 XtDestroyWidget(pcpn_widget);
5738 
5739 pcpn_widget=NULL;
5741 qpf_on=-1;
5742 
5743 send_expose();
5744 
5745 }
5746 void change_z_edit_mode(Widget w,XtPointer data,XtPointer junk)
5747 
5748 {
5749 
5750 XtDestroyWidget(z_widget);
5751 
5752 z_widget=NULL;
5754 flf_on=-1;
5755 
5756 send_expose();
5757 
5758 }
5759 void change_maxmin_edit_mode(Widget w,XtPointer data,XtPointer junk)
5760 
5761 {
5762 
5763 XtDestroyWidget(maxmin_widget);
5764 
5765 maxmin_widget=NULL;
5767 maxmin_on=-1;
5768 
5769 send_expose();
5770 
5771 }
5772 void quit_all(Widget w,XtPointer data, XtPointer junk)
5773 
5774 {
5775 
5776 int j,m;
5777 
5778 for(j=0;j<maxdays;j++) {
5779 
5780  for(m=0;m<5;m++) {
5781 
5782  /* not databased */
5783 
5784  if(pdata[j].used[m] !=1 || pdata[j].level !=1)
5785  continue;
5786 
5787  send_dbase2();
5788 
5789  quit_flag=1;
5790 
5791  return;
5792 
5793  }
5794 
5795  }
5796 
5797 for(j=0;j<maxdays;j++) {
5798 
5799  for(m=0;m<5;m++) {
5800 
5801  /* not databased */
5802 
5803  if(zdata[j].used[m] !=1 || zdata[j].level[m] !=1)
5804  continue;
5805 
5806  send_dbase2();
5807 
5808  quit_flag=1;
5809 
5810  return;
5811 
5812  }
5813 
5814  }
5815 
5816  for(j=0;j<maxdays;j++) {
5817 
5818  for(m=0;m<5;m++) {
5819 
5820  /* not databased */
5821 
5822  if(tdata[j].used[m] !=1 || tdata[j].level[m] !=1)
5823  continue;
5824 
5825  send_dbase2();
5826 
5827  quit_flag=1;
5828 
5829  return;
5830 
5831  }
5832 
5833  }
5834 quit_all2();
5835 
5836 }
5837 
5839 
5840 {
5841 
5842 int j,m;
5843 
5844 for(j=0;j<maxdays;j++) {
5845 
5846  for(m=0;m<5;m++) {
5847 
5848  /* not databased */
5849 
5850  if(pdata[j].used[m]!=3 && pdata[j].used[m]!=2)
5851  continue;
5852 
5853  send_dbase();
5854 
5855  quit_flag=1;
5856 
5857  return;
5858 
5859  }
5860 
5861  }
5862 
5863 quit();
5864 
5865 }
5866 void quit()
5867 
5868 {
5869 
5870 Cardinal argcount;
5871 Arg args[10];
5872 XmString msg;
5873 Widget err;
5874 
5875 quit_flag=0;
5876 
5877 msg=XmStringCreateLocalized("Quit daily_qc?");
5878 
5879 argcount=0;
5880 XtSetArg(args[argcount],XmNmessageString,msg);argcount++;
5881 XtSetArg(args[argcount],XmNdialogStyle,
5882  XmDIALOG_FULL_APPLICATION_MODAL);argcount++;
5883 err=XmCreateErrorDialog(drawing_area,"info",args,argcount);
5884 XtUnmanageChild(XmMessageBoxGetChild(err,XmDIALOG_HELP_BUTTON));
5885 
5886 XtAddCallback(err,XmNokCallback,quit_callback,NULL);
5887 XtManageChild(err);
5888 XmStringFree(msg);
5889 
5890 }
5891 
5893 
5894 {
5895 
5896 int ier;
5897 char ibuf[1000];
5898 
5899 ier=chdir(scratch_file);
5900 
5901 if(ier==0) {
5902 
5903  sprintf(ibuf,"rm pcp.*.%d",getpid());
5904  system(ibuf);
5905 
5906  }
5907 
5908 exit(1);
5909 
5910 }
5911 
5913 
5914 {
5915 
5917 
5918 
5919 send_expose();
5920 
5921 }
5922 
5924 {
5925 
5926 Arg args[10];
5927 
5929 
5930 tlegend_save=-1;
5931 
5932 if(add_topo_flag==1) {
5933 
5934  add_isohyet_flag=-1;
5935  add_max_flag=-1;
5936  add_min_flag=-1;
5937 
5938  if(isoh_toggle_button != NULL) {
5939 
5940  XtSetArg(args[0],XmNset,False);
5941  XtSetValues(isoh_toggle_button,args,1);
5942 
5943  }
5944 
5945  if(max_toggle_button != NULL) {
5946 
5947  XtSetArg(args[0],XmNset,False);
5948  XtSetValues(max_toggle_button,args,1);
5949 
5950  }
5951 
5952  if(min_toggle_button != NULL) {
5953 
5954  XtSetArg(args[0],XmNset,False);
5955  XtSetValues(min_toggle_button,args,1);
5956 
5957  }
5958  }
5959 
5960 if(current_raster != 0)
5961  change_map_flag=1;
5962 
5963 current_raster=0;
5964 
5965 send_expose();
5966 
5967 }
5968 
5970 {
5971 
5972 Arg args[10];
5973 
5975 ilegend_save=-1;
5976 
5977 if(add_isohyet_flag==1) {
5978 
5979  add_topo_flag=-1;
5980  add_max_flag=-1;
5981  add_min_flag=-1;
5982 
5983 
5984  if(topo_toggle_button != NULL) {
5985 
5986  XtSetArg(args[0],XmNset,False);
5987  XtSetValues(topo_toggle_button,args,1);
5988 
5989  }
5990 
5991  if(max_toggle_button != NULL) {
5992 
5993  XtSetArg(args[0],XmNset,False);
5994  XtSetValues(max_toggle_button,args,1);
5995 
5996  }
5997 
5998  if(min_toggle_button != NULL) {
5999 
6000  XtSetArg(args[0],XmNset,False);
6001  XtSetValues(min_toggle_button,args,1);
6002 
6003  }
6004 
6005  }
6006 
6007 if(current_raster != 1)
6008  change_map_flag=1;
6009 
6010 current_raster=1;
6011 
6012 send_expose();
6013 
6014 }
6015 
6017 {
6018 
6019 Arg args[10];
6020 
6022 mnlegend_save=-1;
6023 
6024 if(add_max_flag==1) {
6025 
6026  add_topo_flag=-1;
6027  add_min_flag=-1;
6028  add_isohyet_flag=-1;
6029 
6030  if(topo_toggle_button != NULL) {
6031 
6032  XtSetArg(args[0],XmNset,False);
6033  XtSetValues(topo_toggle_button,args,1);
6034 
6035  }
6036 
6037  if(isoh_toggle_button != NULL) {
6038 
6039  XtSetArg(args[0],XmNset,False);
6040  XtSetValues(isoh_toggle_button,args,1);
6041 
6042  }
6043 
6044  if(min_toggle_button != NULL) {
6045 
6046  XtSetArg(args[0],XmNset,False);
6047  XtSetValues(min_toggle_button,args,1);
6048 
6049  }
6050 
6051  }
6052 
6053 if(current_raster != 2)
6054  change_map_flag=1;
6055 
6056 current_raster=2;
6057 
6058 send_expose();
6059 
6060 }
6061 
6063 {
6064 
6065 Arg args[10];
6066 
6068 mnlegend_save=-1;
6069 
6070 if(add_min_flag==1) {
6071 
6072  add_topo_flag=-1;
6073  add_max_flag=-1;
6074  add_isohyet_flag=-1;
6075 
6076  if(topo_toggle_button != NULL) {
6077 
6078  XtSetArg(args[0],XmNset,False);
6079  XtSetValues(topo_toggle_button,args,1);
6080 
6081  }
6082 
6083  if(isoh_toggle_button != NULL) {
6084 
6085  XtSetArg(args[0],XmNset,False);
6086  XtSetValues(isoh_toggle_button,args,1);
6087 
6088  }
6089 
6090  if(max_toggle_button != NULL) {
6091 
6092  XtSetArg(args[0],XmNset,False);
6093  XtSetValues(max_toggle_button,args,1);
6094 
6095  }
6096 
6097  }
6098 
6099 if(current_raster != 3)
6100  change_map_flag=1;
6101 
6102 current_raster=3;
6103 
6104 send_expose();
6105 
6106 }
6107 
6108 void map_select(Widget w,XtPointer data,XtPointer call_data)
6109 {
6110 
6111 off[(int)data]=-off[(int)data];
6112 
6113 send_expose();
6114 
6115 }
6116 
6118 
6119 {
6120 
6122 write_screen();
6123 
6124 }
6125 void source_select(Widget w,XtPointer data,XmDrawingAreaCallbackStruct *call_data)
6126 
6127 {
6128 
6129 int i;
6130 Cardinal argcount;
6131 Arg args[10];
6132 
6133 dflag[(int)data]=-dflag[(int)data];
6134 
6135 if((int)data==tsmax+1) {
6136 
6137  if(dflag[tsmax+1]==1){
6138 
6139  for(i=1;i<tsmax+2;i++){
6140 
6141  dflag[i]=1;
6142  argcount=1;
6143  XtSetArg(args[0],XmNset,True);
6144  XtSetValues(bwidget[i],args,argcount);
6145 
6146  }
6147 
6148  }
6149 
6150  else{
6151 
6152  for(i=1;i<tsmax+2;i++){
6153 
6154  dflag[i]=-1;
6155  argcount=1;
6156  XtSetArg(args[0],XmNset,False);
6157  XtSetValues(bwidget[i],args,argcount);
6158 
6159  }
6160 
6161  }
6162 
6163  }
6164 
6165 
6166 send_expose();
6167 
6168 }
6169 
6170 void quality_select(Widget w,XtPointer data,XmDrawingAreaCallbackStruct *call_data)
6171 
6172 {
6173 
6174 /*
6175 good=0
6176 Bad=1
6177 Manual=2
6178 Questionable=3
6179 Estimate=5
6180 Time Distributed=6
6181 All=9
6182 
6183 */
6184 
6185 int i;
6186 Cardinal argcount;
6187 Arg args[10];
6188 
6189 i=funct[(int)data];
6190 
6191 qflag[i]=-qflag[i];
6192 
6193 if(i==9) {
6194 
6195  if(qflag[9]==1){
6196 
6197  for(i=0;i<9;i++){
6198 
6199  if(i==8)
6200  continue;
6201 
6202  qflag[funct[i]]=1;
6203  argcount=1;
6204  XtSetArg(args[0],XmNset,True);
6205  XtSetValues(awidget[i],args,argcount);
6206 
6207  }
6208 
6209  }
6210 
6211  else{
6212 
6213  for(i=0;i<9;i++){
6214 
6215  if(i==8)
6216  continue;
6217 
6218  qflag[funct[i]]=-1;
6219  argcount=1;
6220  XtSetArg(args[0],XmNset,False);
6221  XtSetValues(awidget[i],args,argcount);
6222 
6223  }
6224 
6225  }
6226 
6227  }
6228 
6229 send_expose();
6230 
6231 }
6232 
6233 void handle_expose(Widget w,XtPointer data,XmDrawingAreaCallbackStruct *call_data)
6234 
6235 {
6236 
6237 XEvent *p_event=call_data->event;
6238 
6239 if(p_event->xexpose.count==0) {
6240 
6241 XSetFunction(display,gc,GXcopy);
6242 
6243 if(change_topo_flag==1)
6245 /*
6246 else if(change_isohyet_flag==1)
6247  redraw_isohyet_legend(pixm);
6248 */
6249 else if(change_pcpn_flag==1)
6251 
6252 else if(change_diff_flag==1)
6253  redraw_diff_legend(pixm);
6254 
6255 else if(change_frz_flag==1)
6256  redraw_frz_legend(pixm);
6257 
6258 else if(change_rpcpn_flag==1)
6259  redraw_rpcpn_legend(pixm);
6260 
6261 else if(change_maxmin_flag==1)
6262  redraw_maxmin_legend(pixm);
6263 
6264 else if(first_through != 0)
6266 
6267 XCopyArea(display,pixm,window,gc,0,0,max_width,max_height,0,0);
6268 
6269 
6270 
6271  }
6272 
6273 
6274 return;
6275 
6276 }
6277 
6278 void handle_resize(Widget w,XtPointer data,XmDrawingAreaCallbackStruct *call_data)
6279 
6280 {
6281 
6282 Dimension width,height;
6283 Arg args[10];
6284 
6285 XtSetArg(args[0],XtNwidth,&width);
6286 XtSetArg(args[1],XtNheight,&height);
6287 XtGetValues(drawing_area,args,2);
6288 
6289 first++;
6290 if(first==1)
6291  return;
6292 
6293 npoint[0]=(float)npoint[0]*(float)width/(float)owidth;
6294 npoint[1]=(float)npoint[1]*(float)height/(float)oheight;
6295 
6296 if(add_topo_flag != 1 && add_isohyet_flag != 1
6297  && add_max_flag != 1 && add_min_flag != 1)
6298  current_raster=-1;
6299 
6300 if(add_topo_flag==1 || add_isohyet_flag==1
6301  || add_max_flag==1 || add_min_flag==1)
6302  change_map_flag=1;
6303 
6305 
6306 write_screen();
6307 
6308 owidth=width;
6309 oheight=height;
6310 opoint[0]=npoint[0];
6311 opoint[1]=npoint[1];
6312 
6313 return;
6314 
6315 }
6316 
6317 void handle_mouse(Widget w, XtPointer data, XEvent *p_event)
6318 
6319 {
6320 
6321 Dimension width,height;
6322 Arg args[10];
6323 int win_x,win_y,xsize,ysize;
6324 unsigned int win_button,state;
6325 
6326 win_y=p_event->xbutton.y;
6327 win_x=p_event->xbutton.x;
6328 win_button=p_event->xbutton.button;
6329 state=p_event->xbutton.state;
6330 
6331 if((state & ControlMask)==4 && win_button!=Button3) {
6332 
6333  xsize=(display_set[display_flag].xmax[0]-
6334  display_set[display_flag].xmin[0])/10;
6335  ysize=(display_set[display_flag].ymax[0]-
6336  display_set[display_flag].ymin[0])/10;
6337 
6338  opoint[0]=xsize/2;
6339  opoint[1]=ysize/2;
6340  zoom=1;
6341 
6342  redraw_map(xsize/2,ysize/2,Button2);
6343 
6344  return;
6345 
6346  }
6347 
6348 XtSetArg(args[0],XtNwidth,&width);
6349 XtSetArg(args[1],XtNheight,&height);
6350 XtGetValues(drawing_area,args,2);
6351 
6352 if(win_x > (width - legendxsize)) {
6353 
6354  if(change_topo_flag==1)
6355  change_topo_legend(win_x,win_y);
6356 
6357  /* else if(change_isohyet_flag==1)
6358  change_isohyet_legend(win_x,win_y);
6359 */
6360  else if(change_pcpn_flag==1)
6361  change_pcpn_legend(win_x,win_y);
6362 
6363  else if(change_rpcpn_flag==1)
6364  change_rpcpn_legend(win_x,win_y);
6365 
6366  else if(change_maxmin_flag==1)
6367  change_maxmin_legend(win_x,win_y);
6368 
6369  else if(change_diff_flag==1)
6370  change_diff_legend(win_x,win_y);
6371 
6372  else if(change_frz_flag==1)
6373  change_frz_legend(win_x,win_y);
6374 
6375  else
6376  change_legend_display(win_x,win_y);
6377 
6378  }
6379 
6380 else if(group_edit!=1 && win_button !=Button3) {
6381 
6382  redraw_map(win_x,win_y,win_button);
6383 
6384 
6385  }
6386 
6387 else if((state & ControlMask)==4 && win_button==Button3)
6388  time_series(win_x,win_y,win_button);
6389 
6390 else if(group_edit==1 && qpf_on==1)
6391  group_edit_stations(win_x,win_y,win_button);
6392 
6393 else if(group_edit==1 && maxmin_on==1)
6394  group_edit_tstations(win_x,win_y,win_button);
6395 
6396 else if(qpf_on==1 && win_button==Button3 && edit_dialog==NULL)
6397  edit_stations(win_x,win_y,win_button);
6398 
6399 else if(flf_on==1 && win_button==Button3 && edit_dialog==NULL)
6400  edit_zstations(win_x,win_y,win_button);
6401 
6402 else if(maxmin_on==1 && win_button==Button3 && edit_dialog==NULL)
6403  edit_maxminstations(win_x,win_y,win_button);
6404 
6405 else
6406  redraw_map(win_x,win_y,win_button);
6407 
6408 }
6409 
6410 
6411 void berror(Widget widget,char *string)
6412 
6413 {
6414 
6415 Cardinal argcount;
6416 Arg args[10];
6417 Widget err;
6418 XmString msg;
6419 
6420 if(error_widget_flag==1)
6421  return;
6422 
6424 
6425 msg=XmStringCreateLocalized(string);
6426 
6427 argcount=0;
6428 XtSetArg(args[argcount],XmNmessageString,msg);argcount++;
6429 XtSetArg(args[argcount],XmNdialogStyle,
6430  XmDIALOG_FULL_APPLICATION_MODAL);argcount++;
6431 err=XmCreateErrorDialog(widget,"info",args,argcount);
6432 XtAddCallback(err,XmNokCallback,clear_error_widget,NULL);
6433 
6434 XtUnmanageChild(XmMessageBoxGetChild(err,XmDIALOG_CANCEL_BUTTON));
6435 XtUnmanageChild(XmMessageBoxGetChild(err,XmDIALOG_HELP_BUTTON));
6436 
6437 XtManageChild(err);
6438 XmStringFree(msg);
6439 
6440 }
6441 
6442 void bmessage(Widget widget,char *string)
6443 
6444 {
6445 
6446 Cardinal argcount;
6447 Arg args[10];
6448 XmString msg;
6449 
6450 msg=XmStringCreateLocalized(string);
6451 
6452 argcount=0;
6453 XtSetArg(args[argcount],XmNdialogStyle,
6454  XmDIALOG_FULL_APPLICATION_MODAL);argcount++;
6455 err=XmCreateWorkingDialog(drawing_area,"info",args,argcount);
6456 
6457 XtUnmanageChild(XmMessageBoxGetChild(err,XmDIALOG_OK_BUTTON));
6458 XtUnmanageChild(XmMessageBoxGetChild(err,XmDIALOG_HELP_BUTTON));
6459 XtUnmanageChild(XmMessageBoxGetChild(err,XmDIALOG_CANCEL_BUTTON));
6460 XtUnmanageChild(XmMessageBoxGetChild(err,XmDIALOG_SEPARATOR));
6461 
6462 XtSetArg(args[0],XmNlabelString,msg);
6463 XtSetValues(XmMessageBoxGetChild(err,XmDIALOG_MESSAGE_LABEL),args,1);
6464 XtVaSetValues(XtParent(err),XmNtitle," ",0);
6465 
6466 XtManageChild(err);
6467 XmStringFree(msg);
6468 
6470 
6471 }
6472 
6473 void kill_widget(Widget widget,XtPointer client_data,XtPointer call_data)
6474 
6475 {
6476 
6477 XtDestroyWidget(widget);
6478 
6479 
6480 }
6481 
6483 
6484 {
6485 
6487 
6488 }
6489 
6491 
6492 
6493 {
6494 
6495 Cardinal argcount;
6496 Arg args[20];
6497 char text[100000];
6498 char tbuf[1000];
6499 int j,m;
6500 XmString btext;
6501 time_t ltime;
6502 Widget rowcol,ztext;
6503 struct tm *gm;
6504 XmString cancel;
6505 
6506 text[0]=0;
6507 cancel=XmStringCreateLocalized("No");
6508 
6509 for(j=0;j<maxdays;j++) {
6510 
6511  /* if processing level a data is not available do not write out
6512  processing level b data. In addition, do not write MAPs
6513  if no processing level a data */
6514 
6515  for(m=0;m<5;m++) {
6516 
6517  if(pdata[j].used[m]!=3 && pdata[j].used[m]!=2) {
6518 
6519  if(zdata[j].used[m]!=3 && zdata[j].used[m]!=2) {
6520 
6521  if(tdata[j].used[m]!=3 && tdata[j].used[m]!=2)
6522  continue;
6523 
6524  }
6525 
6526  }
6527 
6528  ltime=pdata[j].data_time;
6529 
6530  gm=gmttime(&ltime);
6531 
6532  sprintf(tbuf,"%02d-%02d-%02d\n",
6533  gm->tm_mon+1,gm->tm_mday,gm->tm_year);
6534 
6535  strcat(text,tbuf);
6536 
6537  break;
6538 
6539  }
6540 
6541  }
6542 
6543 btext=XmStringCreateLocalized("Save the following Precipitation and MAP datasets?");
6544 
6545 argcount=0;
6546 XtSetArg(args[argcount],XmNmessageString,btext);argcount++;
6547 XtSetArg(args[argcount],XmNcancelLabelString,cancel);argcount++;
6548 XtSetArg(args[argcount],XmNdialogStyle,
6549  XmDIALOG_FULL_APPLICATION_MODAL);argcount++;
6550 dbase_dialog=XmCreateMessageDialog(drawing_area,"Send database",args,argcount);
6551 
6552 XtAddCallback(dbase_dialog,XmNokCallback,save_dbase,NULL);
6553 XtAddCallback(dbase_dialog,XmNcancelCallback,cancel_dbase,NULL);
6554 
6555 XtUnmanageChild(XmMessageBoxGetChild(dbase_dialog,XmDIALOG_HELP_BUTTON));
6556 
6557 argcount=0;
6558 rowcol=XtCreateWidget("rowcolo",xmRowColumnWidgetClass,dbase_dialog,args,argcount);
6559 
6560 argcount=0;
6561 XtSetArg(args[argcount],XmNeditMode,XmMULTI_LINE_EDIT);argcount++;
6562 XtSetArg(args[argcount],XmNscrollBarDisplayPolicy,XmSTATIC);argcount++;
6563 XtSetArg(args[argcount],XmNeditable,False);argcount++;
6564 XtSetArg(args[argcount],XmNcolumns,40);argcount++;
6565 XtSetArg(args[argcount],XmNrows,10);argcount++;
6566 XtSetArg(args[argcount],XmNscrollVertical,True);argcount++;
6567 XtSetArg(args[argcount],XmNscrollHorizontal,False);argcount++;
6568 XtSetArg(args[argcount],XmNcursorPositionVisible,False);argcount++;
6569 XtSetArg(args[argcount],XmNscrollingPolicy,XmAPPLICATION_DEFINED);argcount++;
6570 XtSetArg(args[argcount],XmNvalue,&text);argcount++;
6571 ztext=XmCreateScrolledText(rowcol,"text",args,argcount);
6572 
6573 XtManageChild(ztext);
6574 XtManageChild(rowcol);
6575 XtManageChild(dbase_dialog);
6576 
6577 }
6578 
6580 
6581 
6582 {
6583 
6584 Cardinal argcount;
6585 Arg args[20];
6586 char text[10000];
6587 char tbuf[1000];
6588 int j,m;
6589 XmString btext;
6590 time_t ltime;
6591 Widget rowcol,ztext;
6592 struct tm *gm;
6593 XmString cancel;
6594 
6595 text[0]=0;
6596 cancel=XmStringCreateLocalized("quit anyway");
6597 
6598 for(j=0;j<maxdays;j++) {
6599 
6600  /* if processing level a data is not available do not write out
6601  processing level b data. In addition, do not write MAPs
6602  if no processing level a data */
6603 
6604  for(m=0;m<5;m++) {
6605 
6606  if(pdata[j].used[m]!=1 || pdata[j].level !=1 )
6607  continue;
6608 
6609  ltime=pdata[j].data_time;
6610 
6611  gm=gmttime(&ltime);
6612 
6613  sprintf(tbuf,"Precipitation %02d-%02d-%02d\n",
6614  gm->tm_mon+1,gm->tm_mday,gm->tm_year);
6615 
6616  strcat(text,tbuf);
6617 
6618  break;
6619 
6620  }
6621 
6622  }
6623 
6624 for(j=0;j<maxdays;j++) {
6625 
6626  /* if processing level a data is not available do not write out
6627  processing level b data. In addition, do not write MAPs
6628  if no processing level a data */
6629 
6630  for(m=0;m<5;m++) {
6631 
6632  if(zdata[j].used[m]!=1 || zdata[j].level[m]!=1)
6633  continue;
6634 
6635  ltime=pdata[j].data_time;
6636 
6637  gm=gmttime(&ltime);
6638 
6639  sprintf(tbuf,"Freezing level %02d-%02d-%02d\n",
6640  gm->tm_mon+1,gm->tm_mday,gm->tm_year);
6641 
6642  strcat(text,tbuf);
6643 
6644  break;
6645 
6646  }
6647 
6648 }
6649 
6650 for(j=0;j<maxdays;j++) {
6651 
6652  /* if processing level a data is not available do not write out
6653  processing level b data. In addition, do not write MAPs
6654  if no processing level a data */
6655 
6656  for(m=0;m<6;m++) {
6657 
6658  if(tdata[j].used[m]!=1 || tdata[j].level[m]!=1)
6659  continue;
6660 
6661  ltime=pdata[j].data_time;
6662 
6663  gm=gmttime(&ltime);
6664 
6665  sprintf(tbuf,"Temperature %02d-%02d-%02d\n",
6666  gm->tm_mon+1,gm->tm_mday,gm->tm_year);
6667 
6668  strcat(text,tbuf);
6669 
6670  break;
6671 
6672  }
6673 
6674 }
6675 
6676 btext=XmStringCreateLocalized("The following datasets need to be QC'd!");
6677 
6678 argcount=0;
6679 XtSetArg(args[argcount],XmNmessageString,btext);argcount++;
6680 XtSetArg(args[argcount],XmNcancelLabelString,cancel);argcount++;
6681 XtSetArg(args[argcount],XmNdialogStyle,
6682  XmDIALOG_FULL_APPLICATION_MODAL);argcount++;
6683 dbase_dialog=XmCreateMessageDialog(drawing_area,"Send database",args,argcount);
6684 
6685 XtAddCallback(dbase_dialog,XmNokCallback,ok_dbase,NULL);
6686 XtAddCallback(dbase_dialog,XmNcancelCallback,quit_all2,NULL);
6687 
6688 XtUnmanageChild(XmMessageBoxGetChild(dbase_dialog,XmDIALOG_HELP_BUTTON));
6689 
6690 argcount=0;
6691 rowcol=XtCreateWidget("rowcolo",xmRowColumnWidgetClass,dbase_dialog,args,argcount);
6692 
6693 argcount=0;
6694 XtSetArg(args[argcount],XmNeditMode,XmMULTI_LINE_EDIT);argcount++;
6695 XtSetArg(args[argcount],XmNscrollBarDisplayPolicy,XmSTATIC);argcount++;
6696 XtSetArg(args[argcount],XmNeditable,False);argcount++;
6697 XtSetArg(args[argcount],XmNcolumns,40);argcount++;
6698 XtSetArg(args[argcount],XmNrows,10);argcount++;
6699 XtSetArg(args[argcount],XmNscrollVertical,True);argcount++;
6700 XtSetArg(args[argcount],XmNscrollHorizontal,False);argcount++;
6701 XtSetArg(args[argcount],XmNcursorPositionVisible,False);argcount++;
6702 XtSetArg(args[argcount],XmNscrollingPolicy,XmAPPLICATION_DEFINED);argcount++;
6703 XtSetArg(args[argcount],XmNvalue,&text);argcount++;
6704 ztext=XmCreateScrolledText(rowcol,"text",args,argcount);
6705 
6706 XtManageChild(ztext);
6707 XtManageChild(rowcol);
6708 XtManageChild(dbase_dialog);
6709 
6710 }
6711 
6713 
6714 {
6715 
6716 XtDestroyWidget(dbase_dialog);
6717 quit_all2();
6718 
6719 }
6720 
6721 void ok_dbase()
6722 
6723 {
6724 
6725 XtDestroyWidget(dbase_dialog);
6726 
6727 }
6728 
6730 
6731 {
6732 
6733 XtDestroyWidget(dbase_dialog);
6734 
6735 if(quit_flag==1)
6736  quit();
6737 
6738 }
6739 
6741 
6742 {
6743 
6744 Cardinal argcount;
6745 Arg args[10];
6746 int ier;
6747 char buf[2000],cmd[2000],ebuf[2000],fbuf[2000],mbuf[2000],xbuf[2000],dbuf[2000],pbuf[2000];
6748 int k,j,m,l,ll,num,i,h,len,numzones;
6749 int jj;
6750 struct tm *gm;
6751 FILE *fp;
6752 char *spaces;
6753 Widget dialog,rowcol,s_text;
6754 int slider_size,scrollm,ivalue,increment,page_increment;
6755 int posit;
6756 XmString text;
6757 float temp;
6758 time_t old_time;
6759 char pchar[2];
6760 int save_isom;
6761 int time_pos;
6762 int archive_flag[10];
6763 
6764 for(k=0;k<10;k++)
6765  archive_flag[k]=-1;
6766 
6767 save_isom=isom;
6768 pchar[1]=0;
6769 
6770 posit=0;
6771 spaces=" ";
6772 
6773 XDefineCursor(display,window,watch_cursor);
6774 XmUpdateDisplay(top_level);
6775 
6776 text=XmStringCreateLocalized("Gridding precipitation,building MAPs and Saving to database");
6777 
6778 argcount=0;
6779 XtSetArg(args[argcount],XmNmessageString,text);argcount++;
6780 XtSetArg(args[argcount],XmNdialogStyle,
6781  XmDIALOG_FULL_APPLICATION_MODAL);argcount++;
6782 dialog=XmCreateMessageDialog(drawing_area,"Save database",args,argcount);
6783 XtUnmanageChild(XmMessageBoxGetChild(dialog,XmDIALOG_CANCEL_BUTTON));
6784 XtUnmanageChild(XmMessageBoxGetChild(dialog,XmDIALOG_OK_BUTTON));
6785 XtUnmanageChild(XmMessageBoxGetChild(dialog,XmDIALOG_HELP_BUTTON));
6786 XtUnmanageChild(XmMessageBoxGetChild(dialog,XmDIALOG_DEFAULT_BUTTON));
6787 XtUnmanageChild(XmMessageBoxGetChild(dialog,XmDIALOG_SEPARATOR));
6788 
6789 argcount=0;
6790 rowcol=XtCreateWidget("rowcolo",xmRowColumnWidgetClass,dialog,args,argcount);
6791 
6792 argcount=0;
6793 XtSetArg(args[argcount],XmNeditMode,XmMULTI_LINE_EDIT);argcount++;
6794 XtSetArg(args[argcount],XmNscrollBarDisplayPolicy,XmSTATIC);argcount++;
6795 XtSetArg(args[argcount],XmNeditable,False);argcount++;
6796 XtSetArg(args[argcount],XmNcolumns,40);argcount++;
6797 XtSetArg(args[argcount],XmNrows,10);argcount++;
6798 XtSetArg(args[argcount],XmNscrollVertical,True);argcount++;
6799 XtSetArg(args[argcount],XmNscrollHorizontal,False);argcount++;
6800 XtSetArg(args[argcount],XmNcursorPositionVisible,False);argcount++;
6801 XtSetArg(args[argcount],XmNscrollingPolicy,XmAPPLICATION_DEFINED);argcount++;
6802 s_text=XmCreateScrolledText(rowcol,"text",args,argcount);
6803 
6804 XtManageChild(s_text);
6805 
6806 XtVaGetValues(XtParent(s_text),XmNverticalScrollBar,&scrollbar,NULL);
6807 
6808 XtManageChild(rowcol);
6809 XtManageChild(dialog);
6810 XmStringFree(text);
6811 
6812 XmtWaitUntilMapped(dialog);
6813 
6814 XmUpdateDisplay(top_level);
6815 
6816 if(dbase_out[0] != 0) {
6817 
6818  for(j=0;j<maxdays;j++) {
6819 
6820  /* if processing level a data is not available do not write out
6821  processing level b data. In addition, do not write MAPs
6822  if no processing level a data */
6823 
6824  for(m=0;m<5;m++) {
6825 
6826  if(pdata[j].used[m]==3 || pdata[j].used[m]==2)
6827  break;
6828 
6829  }
6830 
6831  if(m==5)
6832  continue;
6833 
6834  /* re-create all pcpn and maps if necessary */
6835 
6836  /* next three lines are new */
6837 
6838 
6840 
6842 
6844 
6845  check_consistency(j);
6846 
6847  gm=gmttime(&pdata[j].data_time);
6848 
6849  sprintf(fbuf,"%sbad.%02d-%02d-%02d",
6850  proc_pcpn_file,gm->tm_mon+1,gm->tm_mday,gm->tm_year);
6851 
6852  isom=gm->tm_mon;
6853 
6854  write_bad_values(fbuf,j);
6855 
6856  for(l=0;l<5;l++) {
6857 
6858  if (pdata[j].used[l]==0 ||
6859  pdata[j].used[l]==3)
6860  continue;
6861 
6862  if(l < 2)
6863  old_time=pdata[j].data_time-86400;
6864 
6865  else
6866  old_time=pdata[j].data_time;
6867 
6868  gm=gmttime(&old_time);
6869 
6870  sprintf(xbuf,"Precipitation %02d-%02d-%02d",gm->tm_mon+1,
6871  gm->tm_mday,gm->tm_year);
6872 
6873  dbuf[0]=0;
6874 
6875  strcat(dbuf,xbuf);
6876  strcat(dbuf," ");
6877  strcat(dbuf,timefile[l]);
6878  strcat(dbuf,"\n");
6879 
6880  posit=posit+strlen(dbuf);
6881  XmTextInsert(s_text,posit,dbuf);
6882 
6883  XtVaGetValues(scrollbar,XmNmaximum,&scrollm,NULL);
6884  XmScrollBarGetValues(scrollbar,&ivalue,&slider_size,
6885  &increment,&page_increment);
6886  XmScrollBarSetValues(scrollbar,scrollm-slider_size,
6887  slider_size,increment,page_increment,True);
6888 
6889  if(l < 4)
6890  ll=0;
6891 
6892  else
6893  ll=1;
6894 
6895  render_pcp(j,l,ll);
6896 
6897  sprintf(dbuf,"%s%02d-%02d-%02d.%s",grid_file,
6898  gm->tm_mon+1,gm->tm_mday,gm->tm_year,timefile[l]);
6899 
6900  write_qpf_grids(dbuf);
6901 
6902  if(l < 4)
6903  num=j*4+3-l;
6904 
6905  else
6906  num=40+j;
6907 
6908  make_map(num);
6909 
6910  }
6911 
6913 
6914  old_time=pdata[j].data_time;
6915 
6916  gm=gmttime(&old_time);
6917 
6918  sprintf(fbuf,"%s%02d-%02d-%02d",
6919  proc_pcpn_file,gm->tm_mon+1,gm->tm_mday,gm->tm_year);
6920 
6921  fp=fopen(fbuf,"w");
6922 
6923  for(m=0;m < max_stations;m++) {
6924 
6925  gm=gmtime(&pdata[j].data_time);
6926  sprintf(pbuf,"PPD%s%s",type,&station[m].parm[4]);
6927  sprintf(buf,".AR %s %02d%02d%02d DH12/%s ",
6928  station[m].hb5,1900+gm->tm_year,gm->tm_mon+1,gm->tm_mday,pbuf);
6929 
6930 
6931  if(pdata[j].used[4] != 0) {
6932 
6933  if(pdata[j].stn[m].frain[4].data < 0 )
6934 
6935  strcpy(mbuf," M ");
6936 
6937  else {
6938 
6939  sprintf(mbuf,"%5.2f",pdata[j].stn[m].frain[4].data);
6940 
6941  if(pdata[j].stn[m].sflag[4]!=1) {
6942 
6943  if(pdata[j].stn[m].frain[4].qual==0)
6944  strcat(mbuf,"S");
6945 
6946  if(pdata[j].stn[m].frain[4].qual==1)
6947  strcat(mbuf,"F");
6948 
6949  if(pdata[j].stn[m].frain[4].qual==2)
6950  strcat(mbuf,"W");
6951 
6952  if(pdata[j].stn[m].frain[4].qual==3)
6953  strcat(mbuf,"Q");
6954 
6955  if(pdata[j].stn[m].frain[4].qual==4)
6956  strcat(mbuf,"D");
6957 
6958  if(pdata[j].stn[m].frain[4].qual==8)
6959  strcat(mbuf,"V");
6960 
6961  if(pdata[j].stn[m].frain[4].qual==5)
6962  strcat(mbuf,"E");
6963 
6964  if(pdata[j].stn[m].frain[4].qual==6)
6965  strcat(mbuf,"L");
6966 
6967  }
6968 
6969  else if(pdata[j].stn[m].sflag[4]==1) {
6970 
6971  if(pdata[j].stn[m].frain[k].qual==8)
6972  strcat(mbuf,"A");
6973 
6974  if(pdata[j].stn[m].frain[k].qual==0)
6975  strcat(mbuf,"B");
6976 
6977  if(pdata[j].stn[m].frain[k].qual==3)
6978  strcat(mbuf,"C");
6979 
6980  }
6981 
6982  }
6983 
6984  strcat(buf,mbuf);
6985  strcat(buf,"\n");
6986 
6987 
6988  fputs(buf,fp);
6989 
6990 
6991  }
6992 
6993  old_time=pdata[j].data_time-86400;
6994  gm=gmtime(&old_time);
6995  sprintf(pbuf,"PPQ%s%s",type,&station[m].parm[4]);
6996  sprintf(buf,".ER %s %02d%02d%02d DH18/%s/DIH+6/",
6997  station[m].hb5,1900+gm->tm_year,gm->tm_mon+1,gm->tm_mday,pbuf);
6998 
6999  for(k=0;k<4;k++) {
7000 
7001  if(pdata[j].used[k] == 0) {
7002 
7003  strcpy(mbuf," ");
7004  if(k != 3)
7005  strcat(mbuf,"/");
7006 
7007 
7008  }
7009 
7010 
7011  else if(pdata[j].stn[m].frain[k].data < 0) {
7012 
7013  /* printf("missing %d %s %f %d\n",k,station[m].hb5,
7014  pdata[j].stn[m].frain[k].data,pdata[j].stn[m].frain[k].qual);
7015  */
7016  strcpy(mbuf," M ");
7017  if(k != 3)
7018  strcat(mbuf,"/");
7019 
7020  }
7021 
7022  else {
7023 
7024  sprintf(mbuf,"%5.2f",pdata[j].stn[m].frain[k].data);
7025 
7026  if(pdata[j].stn[m].frain[k].qual==8)
7027  strcat(mbuf,"V");
7028 
7029  if(pdata[j].stn[m].frain[k].qual==1)
7030  strcat(mbuf,"F");
7031 
7032  if(pdata[j].stn[m].frain[k].qual==2)
7033  strcat(mbuf,"W");
7034 
7035  if(pdata[j].stn[m].frain[k].qual==3)
7036  strcat(mbuf,"Q");
7037 
7038  if(pdata[j].stn[m].frain[k].qual==4)
7039  strcat(mbuf,"D");
7040 
7041  if(pdata[j].stn[m].frain[k].qual==0)
7042  strcat(mbuf,"S");
7043 
7044  if(pdata[j].stn[m].frain[k].qual==5)
7045  strcat(mbuf,"E");
7046 
7047  if(pdata[j].stn[m].frain[k].qual==6)
7048  strcat(mbuf,"L");
7049 
7050 
7051  if(k != 3)
7052  strcat(mbuf,"/");
7053 
7054  }
7055 
7056  strcat(buf,mbuf);
7057 
7058  }
7059 
7060  strcat(buf,"\n");
7061 
7062  fputs(buf,fp);
7063  }
7064 
7065  fclose(fp);
7066  strcpy(cmd,"rcp ");
7067  strcat(cmd,fbuf);
7068  strcat(cmd," ");
7069  strcat(cmd,dbase_out);
7070 
7071  printf("%s\n",cmd);
7072  fflush(stdout);
7073  ier=system(cmd);
7074 
7075  if(ier!=0) {
7076 
7077  strcpy(ebuf,"could not execute ");
7078  strcat(ebuf,cmd);
7079  berror(drawing_area,ebuf);
7080 
7081  }
7082 
7083  for(l=0;l<4;l++) {
7084 
7085  jj=j*4+3-l;
7086 
7087  if(pcp_in_use[jj]!=1)
7088  continue;
7089 
7090  if(l < 2)
7091  old_time=pdata[j].data_time-86400;
7092 
7093  else
7094  old_time=pdata[j].data_time;
7095 
7096  gm=gmttime(&old_time);
7097 
7098  sprintf(dbuf,"%s%02d-%02d-%02d.%s",grid_file,
7099  gm->tm_mon+1,gm->tm_mday,gm->tm_year,timefile[l]);
7100 
7101  strcpy(cmd,"rcp ");
7102  strcat(cmd,dbuf);
7103  strcat(cmd," ");
7104  strcat(cmd,grid_out);
7105 
7106  printf("%s\n",cmd);
7107  fflush(stdout);
7108  ier=system(cmd);
7109 
7110 
7111  printf("ier is %d %d\n",l,ier);
7112  printf("cmd is %s\n",cmd);
7113 
7114  if(ier!=0) {
7115 
7116  strcpy(ebuf,"could not execute ");
7117  strcat(ebuf,cmd);
7118  berror(drawing_area,ebuf);
7119 
7120  }
7121 
7122  }
7123 
7124  /* build map file */
7125 
7126  for(m=0;map[m].hb5[0] != 0;m++) {
7127 
7128  for(k=0;k<4;k++) {
7129 
7130  num=j*4+3-k;
7131 
7132  if(map[m].maps_done[num] == 1)
7133  goto found;
7134 
7135  }
7136 
7137  }
7138 
7139  found:
7140 
7141  if(map[m].hb5[0]==0)
7142  continue;
7143 
7144  gm=gmttime(&pdata[j].data_time);
7145 
7146  sprintf(fbuf,"%s%02d-%02d-%02d",map_file,gm->tm_mon+1,
7147  gm->tm_mday,gm->tm_year);
7148 
7149  fp=fopen(fbuf,"w");
7150 
7151  /* at least processing level a data is available but
7152  no guarantee that MAPs have been rendered */
7153 
7154  old_time=pdata[j].data_time-86400;
7155  gm=gmtime(&old_time);
7156 
7157  /* loop through and write maps to file */
7158 
7159  for(m=0;map[m].hb5[0] != 0;m++) {
7160 
7161  numzones=0;
7162 
7163  for(l=0;l < 4;l++) {
7164 
7165  if(map[m].zones[l] < 0)
7166  continue;
7167 
7168  numzones++;
7169 
7170  }
7171 
7172  for(l=0;l < 4;l++) {
7173 
7174  if(map[m].zones[l] < 0)
7175  continue;
7176 
7177  strcpy(xbuf,".ER ");
7178  strcat(xbuf,map[m].hb5);
7179 
7180  i=0;
7181  while(xbuf[i] != 0)
7182  xbuf[i++]=toupper(xbuf[i]);
7183 
7184 
7185  /* fix for polygon basins*/
7186 
7187  if(strcmp(rfc,"cbrfc")==0 &&
7188  strlen(map[m].hb5)==7) {
7189 
7190  printf("polygon write\n");
7191 
7192  pchar[0]=map[m].bchar[0];
7193  strcat(xbuf,pchar);
7194 
7195  }
7196 
7197  else {
7198 
7199  if(l==0 && numzones != 1) {
7200 
7201  strcat(xbuf,"L");
7202  pchar[0]=map[m].bchar[0];
7203  strcat(xbuf,pchar);
7204 
7205  }
7206 
7207 
7208  else if(l==0 && numzones == 1) {
7209 
7210  strcat(xbuf,"O");
7211  pchar[0]=map[m].bchar[0];
7212  strcat(xbuf,pchar);
7213 
7214  }
7215 
7216  else if(l==1) {
7217 
7218  strcat(xbuf,"M");
7219  pchar[0]=map[m].bchar[1];
7220  strcat(xbuf,pchar);
7221 
7222  }
7223 
7224  else if(l==2) {
7225 
7226  strcat(xbuf,"U");
7227  pchar[0]=map[m].bchar[2];
7228  strcat(xbuf,pchar);
7229 
7230  }
7231 
7232  else if(l==3) {
7233 
7234  strcat(xbuf,"G");
7235  pchar[0]=map[m].bchar[3];
7236  strcat(xbuf,pchar);
7237 
7238  }
7239 
7240  }
7241 
7242  sprintf(mbuf," %02d%02d%02d",1900+gm->tm_year,gm->tm_mon+1,gm->tm_mday);
7243  strcat(xbuf,mbuf);
7244 
7245  strcat(xbuf," DH18/PPQPBZZ/DIH+6");
7246 
7247  for(k=0;k<4;k++) {
7248 
7249  h=j*4+(3-k);
7250 
7251  /* fix for polygon basins */
7252 
7253  if(strcmp(rfc,"cbrfc")==0 &&
7254  strlen(map[m].hb5)==7)
7255  temp=map[m].lz[h];
7256 
7257  else if(l==0)
7258  temp=map[m].lz[h];
7259 
7260  else if(l==1)
7261  temp=map[m].mz[h];
7262 
7263  else if(l==2)
7264  temp=map[m].uz[h];
7265 
7266  else if(l==3)
7267  temp=map[m].gz[h];
7268 
7269  if(map[m].maps_done[h] != 1)
7270  sprintf(mbuf," ");
7271 
7272  else
7273  sprintf(mbuf,"%5.2f ",temp);
7274 
7275  if(k < 4)
7276  strcat(xbuf,"/");
7277 
7278  strcat(xbuf,mbuf);
7279 
7280  }
7281 
7282  strcat(xbuf,"\n");
7283  fputs(xbuf,fp);
7284 
7285  }
7286 
7287  }
7288 
7289  fclose(fp);
7290 
7291  strcpy(cmd,"rcp ");
7292  strcat(cmd,fbuf);
7293  strcat(cmd," ");
7294  strcat(cmd,map_out);
7295 
7296  printf("%s\n",cmd);
7297  fflush(stdout);
7298  ier=system(cmd);
7299 
7300  if(ier!=0) {
7301 
7302  strcpy(ebuf,"could not execute ");
7303  strcat(ebuf,cmd);
7304  berror(drawing_area,ebuf);
7305 
7306 
7307  }
7308 
7309  for(m=0;m<5;m++) {
7310 
7311  if(pdata[j].used[m] != 0)
7312  pdata[j].used[m]=4;
7313 
7314  }
7315 
7316  restore_bad_values(j);
7317 
7318  /* write stddev file */
7319 
7320  gm=gmttime(&pdata[j].data_time);
7321 
7322  sprintf(ebuf,"%sdev.%02d-%02d-%02d",
7323  proc_pcpn_file,gm->tm_mon+1,gm->tm_mday,gm->tm_year);
7324 
7325  fp=fopen(ebuf,"w");
7326 
7327  if(fp!=NULL) {
7328 
7329  sprintf(mbuf,"%f\n",pdata[j].stddev);
7330 
7331  fputs(mbuf,fp);
7332 
7333  fclose(fp);
7334 
7335  }
7336 
7337  sprintf(ebuf,"%sdev.%02d-%02d-%02d",
7338  tpoint2_file,gm->tm_mon+1,gm->tm_mday,gm->tm_year);
7339 
7340  fp=fopen(ebuf,"w");
7341 
7342  if(fp!=NULL) {
7343 
7344  sprintf(mbuf,"%f\n",tdata[j].stddev);
7345 
7346  fputs(mbuf,fp);
7347 
7348  fclose(fp);
7349 
7350  }
7351 
7352  archive_flag[j]=1;
7353 
7354  }
7355 
7356  }
7357 
7358 if(zdbase_out[0] != 0) {
7359 
7360  for(j=0;j<maxdays;j++) {
7361 
7362  /* if processing level a data is not available do not write out
7363  processing level b data. In addition, do not write MAPs
7364  if no processing level a data */
7365 
7366  for(m=0;m<4;m++) {
7367 
7368  if(zdata[j].used[m]==3 || zdata[j].used[m]==2)
7369  break;
7370 
7371  }
7372 
7373  if(m==4)
7374  continue;
7375 
7376  printf("create maz\n");
7377 
7378  /* re-create all pcpn and maps if necessary */
7379 
7380  /* next three lines are new */
7381 
7382  gm=gmttime(&zdata[j].data_time);
7383 
7384  for(l=0;l<4;l++) {
7385 
7386  if (zdata[j].used[l]==0 ||
7387  zdata[j].used[l]==3)
7388  continue;
7389 
7390  if(l < 2)
7391  old_time=zdata[j].data_time-86400;
7392 
7393  else
7394  old_time=zdata[j].data_time;
7395 
7396  gm=gmttime(&old_time);
7397 
7398  sprintf(xbuf,"Freezing level %02d-%02d-%02d",gm->tm_mon+1,
7399  gm->tm_mday,gm->tm_year);
7400 
7401  dbuf[0]=0;
7402 
7403  strcat(dbuf,xbuf);
7404  strcat(dbuf," ");
7405  strcat(dbuf,ztimefile[l]);
7406  strcat(dbuf,"\n");
7407 
7408  posit=posit+strlen(dbuf);
7409  XmTextInsert(s_text,posit,dbuf);
7410 
7411  XtVaGetValues(scrollbar,XmNmaximum,&scrollm,NULL);
7412  XmScrollBarGetValues(scrollbar,&ivalue,&slider_size,
7413  &increment,&page_increment);
7414  XmScrollBarSetValues(scrollbar,scrollm-slider_size,
7415  slider_size,increment,page_increment,True);
7416 
7417  render_z(j,l,0);
7418 
7419  sprintf(dbuf,"%s%02d-%02d-%02d.%s",zgrid_file,
7420  gm->tm_mon+1,gm->tm_mday,gm->tm_year,ztimefile[l]);
7421 
7422  write_qpf_grids(dbuf);
7423 
7424  num=100+j*4+3-l;
7425 
7426  make_rsel(num,num-100);
7427 
7428  }
7429 
7430  old_time=zdata[j].data_time;
7431  gm=gmttime(&old_time);
7432 
7433  sprintf(fbuf,"%s%02d-%02d-%02d",
7434  zpoint2_file,gm->tm_mon+1,gm->tm_mday,gm->tm_year);
7435 
7436  fp=fopen(fbuf,"w");
7437 
7438  for(m=0;m < max_zstations;m++) {
7439 
7440  old_time=zdata[j].data_time-86400;
7441  gm=gmtime(&old_time);
7442  sprintf(pbuf,"HZI%s%s",type,&zstation[m].parm[4]);
7443  sprintf(buf,".ER %s %02d%02d%02d DH12/%s/DIH+6/",
7444  zstation[m].hb5,1900+gm->tm_year,gm->tm_mon+1,gm->tm_mday,pbuf);
7445 
7446  for(k=0;k<4;k++) {
7447 
7448  if(zdata[j].used[k] == 0) {
7449 
7450  strcpy(mbuf," ");
7451  if(k != 3)
7452  strcat(mbuf,"/");
7453 
7454 
7455  }
7456 
7457 
7458  else if(zdata[j].stn[m].zlevel2[k].data < 0) {
7459 
7460  strcpy(mbuf," M ");
7461  if(k != 3)
7462  strcat(mbuf,"/");
7463 
7464  }
7465 
7466  else {
7467 
7468  sprintf(mbuf,"%4.1f",zdata[j].stn[m].zlevel2[k].data);
7469 
7470  if(zdata[j].stn[m].zlevel2[k].qual==8)
7471  strcat(mbuf,"S");
7472 
7473  if(zdata[j].stn[m].zlevel2[k].qual==1)
7474  strcat(mbuf,"F");
7475 
7476  if(zdata[j].stn[m].zlevel2[k].qual==2)
7477  strcat(mbuf,"W");
7478 
7479  if(zdata[j].stn[m].zlevel2[k].qual==5)
7480  strcat(mbuf,"E");
7481 
7482  if(k != 3)
7483  strcat(mbuf,"/");
7484 
7485  }
7486 
7487  strcat(buf,mbuf);
7488 
7489  }
7490 
7491  strcat(buf,"\n");
7492 
7493  fputs(buf,fp);
7494  }
7495 
7496  fclose(fp);
7497 
7498  strcpy(cmd,"rcp ");
7499  strcat(cmd,fbuf);
7500  strcat(cmd," ");
7501  strcat(cmd,zdbase_out);
7502 
7503  printf("%s\n",cmd);
7504  fflush(stdout);
7505  ier=system(cmd);
7506 
7507  if(ier!=0) {
7508 
7509  strcpy(ebuf,"could not execute ");
7510  strcat(ebuf,cmd);
7511  berror(drawing_area,ebuf);
7512 
7513  }
7514 
7515 /* for(l=0;l<4;l++) {
7516 
7517 
7518  if(l < 2)
7519  old_time=zdata[j].data_time-86400;
7520 
7521  else
7522  old_time=zdata[j].data_time;
7523 
7524  gm=gmttime(&old_time);
7525 
7526  sprintf(dbuf,"%s%02d-%02d-%02d.%s",zgrid_file,
7527  gm->tm_mon+1,gm->tm_mday,gm->tm_year,ztimefile[l]);
7528 
7529  strcpy(cmd,"rcp ");
7530  strcat(cmd,dbuf);
7531  strcat(cmd," ");
7532  strcat(cmd,zgrid_out);
7533 
7534  printf("%s\n",cmd);
7535  ier=system(cmd);
7536 
7537  if(ier!=0) {
7538 
7539  strcpy(ebuf,"could not execute ");
7540  strcat(ebuf,cmd);
7541  berror(drawing_area,ebuf);
7542 
7543  }
7544 
7545  }
7546 
7547  */
7548  /* build map file */
7549 
7550  for(m=0;map[m].hb5[0] != 0;m++) {
7551 
7552  for(k=0;k<4;k++) {
7553 
7554  num=j*4+3-k;
7555 
7556  if(map[m].zmaps_done[num] == 1)
7557  goto foundz;
7558 
7559  }
7560 
7561  }
7562 
7563  foundz:
7564 
7565  if(map[m].hb5[0]==0)
7566  continue;
7567 
7568  gm=gmttime(&zdata[j].data_time);
7569 
7570  sprintf(fbuf,"%s%02d-%02d-%02d",rsel_file,gm->tm_mon+1,
7571  gm->tm_mday,gm->tm_year);
7572 
7573  fp=fopen(fbuf,"w");
7574 
7575  /* at least processing level a data is available but
7576  no guarantee that MAPs have been rendered */
7577 
7578  old_time=zdata[j].data_time-86400;
7579  gm=gmtime(&old_time);
7580 
7581  /* loop through and write maps to file */
7582 
7583  for(m=0;map[m].hb5[0] != 0;m++) {
7584 
7585  numzones=0;
7586 
7587  for(l=0;l < 4;l++) {
7588 
7589  if(map[m].zones[l] < 0)
7590  continue;
7591 
7592  numzones++;
7593 
7594  }
7595 
7596  for(l=0;l < 4;l++) {
7597 
7598  if(map[m].zones[l] < 0)
7599  continue;
7600 
7601  strcpy(xbuf,".ER ");
7602  strcat(xbuf,map[m].hb5);
7603 
7604  i=0;
7605  while(xbuf[i] != 0)
7606  xbuf[i++]=toupper(xbuf[i]);
7607 
7608 
7609  /* fix for polygon basins*/
7610 
7611  if(strcmp(rfc,"cbrfc")==0 &&
7612  strlen(map[m].hb5)==7) {
7613 
7614  printf("polygon write\n");
7615 
7616  pchar[0]=map[m].bchar[0];
7617  strcat(xbuf,pchar);
7618 
7619  }
7620 
7621  else {
7622 
7623 
7624  if(l==0 && numzones != 1) {
7625 
7626  strcat(xbuf,"L");
7627  pchar[0]=map[m].bchar[0];
7628  strcat(xbuf,pchar);
7629 
7630  }
7631 
7632 
7633  else if(l==0 && numzones == 1) {
7634 
7635  strcat(xbuf,"O");
7636  pchar[0]=map[m].bchar[0];
7637  strcat(xbuf,pchar);
7638 
7639  }
7640 
7641  else if(l==1) {
7642 
7643  strcat(xbuf,"M");
7644  pchar[0]=map[m].bchar[1];
7645  strcat(xbuf,pchar);
7646 
7647  }
7648 
7649  else if(l==2) {
7650 
7651  strcat(xbuf,"U");
7652  pchar[0]=map[m].bchar[2];
7653  strcat(xbuf,pchar);
7654 
7655  }
7656 
7657  else if(l==3) {
7658 
7659  strcat(xbuf,"G");
7660  pchar[0]=map[m].bchar[3];
7661  strcat(xbuf,pchar);
7662 
7663  }
7664 
7665  }
7666 
7667  sprintf(mbuf," %02d%02d%02d",1900+gm->tm_year,gm->tm_mon+1,gm->tm_mday);
7668  strcat(xbuf,mbuf);
7669 
7670  strcat(xbuf," DH12/HZIPBZZ/DIH+6");
7671 
7672  for(k=0;k<4;k++) {
7673 
7674  h=j*4+(3-k);
7675 
7676 
7677  if(strcmp(rfc,"cbrfc")==0 &&
7678  strlen(map[m].hb5)==7)
7679  temp=map[m].zlz[h];
7680 
7681 
7682  else if(l==0)
7683  temp=map[m].zlz[h];
7684 
7685  else if(l==1)
7686  temp=map[m].zmz[h];
7687 
7688  else if(l==2)
7689  temp=map[m].zuz[h];
7690 
7691  else if(l==3)
7692  temp=map[m].zgz[h];
7693 
7694  if(map[m].zmaps_done[h] != 1)
7695  sprintf(mbuf," ");
7696 
7697  else
7698  sprintf(mbuf,"%4.1f ",temp);
7699 
7700  if(k < 4)
7701  strcat(xbuf,"/");
7702 
7703  strcat(xbuf,mbuf);
7704 
7705  }
7706 
7707  strcat(xbuf,"\n");
7708  fputs(xbuf,fp);
7709 
7710  }
7711 
7712  }
7713 
7714  fclose(fp);
7715 
7716  strcpy(cmd,"rcp ");
7717  strcat(cmd,fbuf);
7718  strcat(cmd," ");
7719  strcat(cmd,zmap_out);
7720 
7721  printf("%s\n",cmd);
7722  fflush(stdout);
7723  ier=system(cmd);
7724 
7725  if(ier!=0) {
7726 
7727  strcpy(ebuf,"could not execute ");
7728  strcat(ebuf,cmd);
7729  berror(drawing_area,ebuf);
7730 
7731 
7732  }
7733 
7734  for(m=0;m<4;m++) {
7735 
7736  if(zdata[j].used[m] != 0)
7737  zdata[j].used[m]=4;
7738 
7739  }
7740 
7741  archive_flag[j]=1;
7742 
7743  }
7744 
7745  }
7746 
7747 if(tdbase_out[0] != 0) {
7748 
7749  for(j=0;j<maxdays;j++) {
7750 
7751  /* if processing level a data is not available do not write out
7752  processing level b data. In addition, do not write MAPs
7753  if no processing level a data */
7754 
7755  for(m=0;m<4;m++) {
7756 
7757  if(tdata[j].used[m]==3 || tdata[j].used[m]==2)
7758  break;
7759 
7760  }
7761 
7762  if(m==4)
7763  continue;
7764 
7765  /* re-create all pcpn and maps if necessary */
7766 
7767  /* next three lines are new */
7768 
7770 
7772 
7773  gm=gmttime(&tdata[j].data_time);
7774 
7775  sprintf(fbuf,"%sbad.%02d-%02d-%02d",
7776  tpoint2_file,gm->tm_mon+1,gm->tm_mday,gm->tm_year);
7777 
7778  isom=gm->tm_mon;
7779 
7780  /* pcp_in_use[200]=1;
7781  pcp_in_use[190]=1;
7782  render_t(0,5,2);
7783  render_t6(j,3,0);
7784 
7785 */
7786 
7787  write_bad_tvalues(fbuf,j);
7788 
7789  for(l=5;l>=0;l--) {
7790 
7791  if (tdata[j].used[l]==0 ||
7792  tdata[j].used[l]==3)
7793  continue;
7794 
7795  if(l < 2)
7796  old_time=tdata[j].data_time-86400;
7797 
7798  else
7799  old_time=tdata[j].data_time;
7800 
7801  gm=gmttime(&old_time);
7802 
7803  sprintf(xbuf,"Temperature %02d-%02d-%02d",gm->tm_mon+1,
7804  gm->tm_mday,gm->tm_year);
7805 
7806  dbuf[0]=0;
7807 
7808  strcat(dbuf,xbuf);
7809  strcat(dbuf," ");
7810  strcat(dbuf,ttimefile[l]);
7811  strcat(dbuf,"\n");
7812 
7813  posit=posit+strlen(dbuf);
7814  XmTextInsert(s_text,posit,dbuf);
7815 
7816  XtVaGetValues(scrollbar,XmNmaximum,&scrollm,NULL);
7817  XmScrollBarGetValues(scrollbar,&ivalue,&slider_size,
7818  &increment,&page_increment);
7819  XmScrollBarSetValues(scrollbar,scrollm-slider_size,
7820  slider_size,increment,page_increment,True);
7821 
7822  if(l==5)
7823  render_t(j,l,2);
7824 
7825  else if(l==4)
7826  render_t(j,l,1);
7827 
7828  else
7829  render_t6(j,l,0);
7830 
7831  sprintf(dbuf,"%s%02d-%02d-%02d.%s",tgrid_file,
7832  gm->tm_mon+1,gm->tm_mday,gm->tm_year,ttimefile[l]);
7833 
7834  write_qpf_grids(dbuf);
7835 
7836  num=150+j*4+3-l;
7837 
7838  if(l < 4)
7839  make_mat(num,num-150);
7840 
7841  }
7842 
7844 
7845  old_time=tdata[j].data_time;
7846  gm=gmttime(&old_time);
7847 
7848  sprintf(fbuf,"%s%02d-%02d-%02d",
7849  tpoint2_file,gm->tm_mon+1,gm->tm_mday,gm->tm_year);
7850 
7851  fp=fopen(fbuf,"w");
7852 
7853  for(m=0;m < max_tstations;m++) {
7854 
7855  old_time=tdata[j].data_time-86400;
7856  gm=gmtime(&old_time);
7857 
7858  sprintf(pbuf,"TAI%s%cZZ",type,tstation[m].parm[4]);
7859  sprintf(buf,".ER %s %02d%02d%02d DH12/%s/DIH+6/",
7860  tstation[m].hb5,1900+gm->tm_year,gm->tm_mon+1,gm->tm_mday,pbuf);
7861 
7862  for(k=0;k<4;k++) {
7863 
7864  if(tdata[j].used[k] == 0) {
7865 
7866  strcpy(mbuf," ");
7867  if(k != 3)
7868  strcat(mbuf,"/");
7869 
7870 
7871  }
7872 
7873 
7874  else if(tdata[j].stn[m].tlevel2[k].data ==-99) {
7875 
7876  strcpy(mbuf," M ");
7877  if(k != 3)
7878  strcat(mbuf,"/");
7879 
7880  }
7881 
7882  else {
7883 
7884  sprintf(mbuf,"%3d",tdata[j].stn[m].tlevel2[k].data);
7885 
7886  if(tdata[j].stn[m].tlevel2[k].qual==8)
7887  strcat(mbuf,"V");
7888 
7889  if(tdata[j].stn[m].tlevel2[k].qual==1)
7890  strcat(mbuf,"F");
7891 
7892  if(tdata[j].stn[m].tlevel2[k].qual==3)
7893  strcat(mbuf,"Q");
7894 
7895  if(tdata[j].stn[m].tlevel2[k].qual==0)
7896  strcat(mbuf,"S");
7897 
7898  if(tdata[j].stn[m].tlevel2[k].qual==5)
7899  strcat(mbuf,"E");
7900 
7901  if(tdata[j].stn[m].tlevel2[k].qual==6)
7902  strcat(mbuf,"L");
7903 
7904  if(k != 3)
7905  strcat(mbuf,"/");
7906 
7907  }
7908 
7909  strcat(buf,mbuf);
7910 
7911  }
7912 
7913  strcat(buf,"\n");
7914  fputs(buf,fp);
7915 
7916  old_time=tdata[j].data_time;
7917  gm=gmtime(&old_time);
7918 
7919  sprintf(pbuf,"TAI%s%cXZ",type,tstation[m].parm[4]);
7920  sprintf(buf,".AR %s %02d%02d%02d DH12/%s ",
7921  tstation[m].hb5,1900+gm->tm_year,gm->tm_mon+1,gm->tm_mday,pbuf);
7922 
7923  if(tdata[j].used[4] == 0)
7924  strcpy(mbuf," ");
7925 
7926  else if(tdata[j].stn[m].tlevel2[4].data == -99)
7927  strcpy(mbuf," M ");
7928 
7929  else {
7930 
7931  sprintf(mbuf,"%3d",tdata[j].stn[m].tlevel2[4].data);
7932 
7933  if(tdata[j].stn[m].tlevel2[4].qual==8)
7934  strcat(mbuf,"V");
7935 
7936  if(tdata[j].stn[m].tlevel2[4].qual==1)
7937  strcat(mbuf,"F");
7938 
7939  if(tdata[j].stn[m].tlevel2[4].qual==3)
7940  strcat(mbuf,"Q");
7941 
7942  if(tdata[j].stn[m].tlevel2[4].qual==0)
7943  strcat(mbuf,"S");
7944 
7945  if(tdata[j].stn[m].tlevel2[4].qual==5)
7946  strcat(mbuf,"E");
7947 
7948  if(tdata[j].stn[m].tlevel2[4].qual==6)
7949  strcat(mbuf,"L");
7950 
7951  }
7952 
7953  strcat(buf,mbuf);
7954  strcat(buf,"\n");
7955  fputs(buf,fp);
7956 
7957  old_time=tdata[j].data_time;
7958  gm=gmtime(&old_time);
7959 
7960  sprintf(pbuf,"TAI%s%cNZ",type,tstation[m].parm[4]);
7961  sprintf(buf,".AR %s %02d%02d%02d DH12/%s ",
7962  tstation[m].hb5,1900+gm->tm_year,gm->tm_mon+1,gm->tm_mday,pbuf);
7963 
7964  if(tdata[j].used[5] == 0)
7965  strcpy(mbuf," ");
7966 
7967  else if(tdata[j].stn[m].tlevel2[5].data ==-99)
7968  strcpy(mbuf," M ");
7969 
7970  else {
7971 
7972  sprintf(mbuf,"%3d",tdata[j].stn[m].tlevel2[5].data);
7973 
7974  if(tdata[j].stn[m].tlevel2[5].qual==8)
7975  strcat(mbuf,"V");
7976 
7977  if(tdata[j].stn[m].tlevel2[5].qual==1)
7978  strcat(mbuf,"F");
7979 
7980  if(tdata[j].stn[m].tlevel2[5].qual==3)
7981  strcat(mbuf,"Q");
7982 
7983  if(tdata[j].stn[m].tlevel2[5].qual==0)
7984  strcat(mbuf,"S");
7985 
7986  if(tdata[j].stn[m].tlevel2[5].qual==5)
7987  strcat(mbuf,"E");
7988 
7989  if(tdata[j].stn[m].tlevel2[5].qual==6)
7990  strcat(mbuf,"L");
7991 
7992  }
7993 
7994  strcat(buf,mbuf);
7995  strcat(buf,"\n");
7996  fputs(buf,fp);
7997 
7998 
7999 
8000  }
8001 
8002  fclose(fp);
8003 
8004  strcpy(cmd,"rcp ");
8005  strcat(cmd,fbuf);
8006  strcat(cmd," ");
8007  strcat(cmd,tdbase_out);
8008 
8009  printf("%s\n",cmd);
8010  fflush(stdout);
8011  ier=system(cmd);
8012 
8013  if(ier!=0) {
8014 
8015  strcpy(ebuf,"could not execute ");
8016  strcat(ebuf,cmd);
8017  berror(drawing_area,ebuf);
8018 
8019  }
8020 
8021 /* for(l=0;l<4;l++) {
8022 
8023 
8024  if(l < 2)
8025  old_time=tdata[j].data_time-86400;
8026 
8027  else
8028  old_time=tdata[j].data_time;
8029 
8030  gm=gmttime(&old_time);
8031 
8032  sprintf(dbuf,"%s%02d-%02d-%02d.%s",tgrid_file,
8033  gm->tm_mon+1,gm->tm_mday,gm->tm_year,ttimefile[l]);
8034 
8035  strcpy(cmd,"rcp ");
8036  strcat(cmd,dbuf);
8037  strcat(cmd," ");
8038  strcat(cmd,tgrid_out);
8039 
8040  printf("%s\n",cmd);
8041  fflush(stdout);
8042  ier=system(cmd);
8043 
8044  if(ier!=0) {
8045 
8046  strcpy(ebuf,"could not execute ");
8047  strcat(ebuf,cmd);
8048  berror(drawing_area,ebuf);
8049 
8050  }
8051 
8052  }
8053 
8054  */
8055  /* build map file */
8056 
8057  for(m=0;map[m].hb5[0] != 0;m++) {
8058 
8059  for(k=0;k<4;k++) {
8060 
8061  num=j*4+3-k;
8062 
8063  if(map[m].tmaps_done[num] == 1)
8064  goto foundt;
8065 
8066  }
8067 
8068  }
8069 
8070  foundt:
8071 
8072  if(map[m].hb5[0]==0)
8073  continue;
8074 
8075  gm=gmttime(&tdata[j].data_time);
8076 
8077  sprintf(fbuf,"%s%02d-%02d-%02d",mat_file,gm->tm_mon+1,
8078  gm->tm_mday,gm->tm_year);
8079 
8080  fp=fopen(fbuf,"w");
8081 
8082  /* at least processing level a data is available but
8083  no guarantee that MAPs have been rendered */
8084 
8085  old_time=tdata[j].data_time-86400;
8086  gm=gmtime(&old_time);
8087 
8088  /* loop through and write maps to file */
8089 
8090  for(m=0;map[m].hb5[0] != 0;m++) {
8091 
8092  numzones=0;
8093 
8094  for(l=0;l < 4;l++) {
8095 
8096  if(map[m].zones[l] < 0)
8097  continue;
8098 
8099  numzones++;
8100 
8101  }
8102 
8103  for(l=0;l < 4;l++) {
8104 
8105  if(map[m].zones[l] < 0)
8106  continue;
8107 
8108  strcpy(xbuf,".ER ");
8109  strcat(xbuf,map[m].hb5);
8110 
8111  i=0;
8112  while(xbuf[i] != 0)
8113  xbuf[i++]=toupper(xbuf[i]);
8114 
8115 
8116  /* fix for polygon basins*/
8117 
8118  if(strcmp(rfc,"cbrfc")==0 &&
8119  strlen(map[m].hb5)==7) {
8120 
8121  printf("polygon write\n");
8122 
8123  pchar[0]=map[m].bchar[0];
8124  strcat(xbuf,pchar);
8125 
8126  }
8127 
8128  else {
8129 
8130 
8131  if(l==0 && numzones != 1) {
8132 
8133  strcat(xbuf,"L");
8134  pchar[0]=map[m].bchar[0];
8135  strcat(xbuf,pchar);
8136 
8137  }
8138 
8139 
8140  else if(l==0 && numzones == 1) {
8141 
8142  strcat(xbuf,"O");
8143  pchar[0]=map[m].bchar[0];
8144  strcat(xbuf,pchar);
8145 
8146  }
8147 
8148  else if(l==1) {
8149 
8150  strcat(xbuf,"M");
8151  pchar[0]=map[m].bchar[1];
8152  strcat(xbuf,pchar);
8153 
8154  }
8155 
8156  else if(l==2) {
8157 
8158  strcat(xbuf,"U");
8159  pchar[0]=map[m].bchar[2];
8160  strcat(xbuf,pchar);
8161 
8162  }
8163 
8164  else if(l==3) {
8165 
8166  strcat(xbuf,"G");
8167  pchar[0]=map[m].bchar[3];
8168  strcat(xbuf,pchar);
8169 
8170  }
8171 
8172  }
8173 
8174  sprintf(mbuf," %02d%02d%02d",1900+gm->tm_year,gm->tm_mon+1,gm->tm_mday);
8175  strcat(xbuf,mbuf);
8176 
8177  strcat(xbuf," DH12/TAIPBZZ/DIH+6");
8178 
8179  for(k=0;k<4;k++) {
8180 
8181  h=j*4+(3-k);
8182 
8183 
8184  if(strcmp(rfc,"cbrfc")==0 &&
8185  strlen(map[m].hb5)==7)
8186  temp=map[m].tlz[h];
8187 
8188 
8189  else if(l==0)
8190  temp=map[m].tlz[h];
8191 
8192  else if(l==1)
8193  temp=map[m].tmz[h];
8194 
8195  else if(l==2)
8196  temp=map[m].tuz[h];
8197 
8198  else if(l==3)
8199  temp=map[m].tgz[h];
8200 
8201  if(map[m].tmaps_done[h] != 1)
8202  sprintf(mbuf," ");
8203 
8204  else
8205  sprintf(mbuf,"%4.1f ",temp);
8206 
8207  if(k < 4)
8208  strcat(xbuf,"/");
8209 
8210  strcat(xbuf,mbuf);
8211 
8212  }
8213 
8214  strcat(xbuf,"\n");
8215  fputs(xbuf,fp);
8216 
8217  }
8218 
8219  }
8220 
8221  fclose(fp);
8222 
8223  strcpy(cmd,"rcp ");
8224  strcat(cmd,fbuf);
8225  strcat(cmd," ");
8226  strcat(cmd,tmap_out);
8227 
8228  printf("%s\n",cmd);
8229  fflush(stdout);
8230  ier=system(cmd);
8231 
8232  if(ier!=0) {
8233 
8234  strcpy(ebuf,"could not execute ");
8235  strcat(ebuf,cmd);
8236  berror(drawing_area,ebuf);
8237 
8238 
8239  }
8240 
8241  for(m=0;m<6;m++) {
8242 
8243  if(tdata[j].used[m] != 0)
8244  tdata[j].used[m]=4;
8245 
8246  }
8248 
8249  archive_flag[j]=1;
8250 
8251  }
8252 
8253  }
8254 
8255 for(k=0;k<10;k++) {
8256 
8257  if(archive_flag[k]==1)
8258  write_archived_obs_data(scratch_file,"obs",rfc,pdata[k].data_time,
8260 
8261  }
8262 
8263 if(qpf_on==1 || flf_on==1 || maxmin_on==1) {
8264 
8265 for(k=1;k<5;k++)
8266  XtSetSensitive(diswidget[k],True);
8267 
8268 if(qpf_on==1) {
8269 
8270  if(pcpn_time_step==0)
8271  time_pos=pcp_flag;
8272 
8273  else
8274 
8275  time_pos=40+pcpn_day;
8276 
8277 }
8278 
8279 else if(flf_on==1)
8280  time_pos=100+pcp_flag;
8281 
8282 else if(maxmin_on==1) {
8283 
8284  if(pcpn_time_step==1)
8285  time_pos=190+pcpn_day;
8286 
8287  else if(pcpn_time_step==2)
8288  time_pos=200+pcpn_day;
8289 
8290  else
8291  time_pos=150+pcp_flag;
8292 
8293  }
8294 
8295 
8296 if(points_flag==1 && pcp_in_use[time_pos]==-1)
8297  k=0;
8298 
8299 else if(points_flag==1 && grids_flag==-1 && map_flag==-1)
8300  k=0;
8301 
8302 else if(points_flag==-1 && grids_flag==1 && map_flag==-1)
8303  k=1;
8304 
8305 else if(points_flag==-1 && grids_flag==-1 && map_flag==1)
8306  k=2;
8307 
8308 else if(points_flag==1 && grids_flag==1 && map_flag==-1)
8309  k=3;
8310 
8311 else if(points_flag==1 && grids_flag==-1 && map_flag==1)
8312  k=4;
8313 
8314 else if(points_flag==-1 && grids_flag==-1 && map_flag==-1)
8315  k=5;
8316 
8317 XtSetArg(args[0],XmNmenuHistory,diswidget[k]);
8318 XtSetValues(rowcol1,args,1);
8319 
8320 }
8321 
8322 
8323 
8324 XtDestroyWidget(dialog);
8325 
8326 XUndefineCursor(display,window);
8327 
8328 XDefineCursor(display,window,dotbox_cursor);
8329 
8330 if(quit_flag==1)
8331  quit();
8332 
8333 isom=save_isom;
8334 
8335 }
8336 
8337 void save_selection2(Widget w,XtPointer data, XtPointer junk)
8338 
8339 {
8340 
8341 char *value;
8342 
8343 XmListCallbackStruct *cbs= (XmListCallbackStruct *) junk;
8344 
8345 XmStringGetLtoR(cbs->item, XmFONTLIST_DEFAULT_TAG, &value);
8346 
8347 strcpy(rec_found,value);
8348 
8349 XtFree(value);
8350 
8351 }
8352 void new_filter(Widget w,XtPointer data, XtPointer junk)
8353 
8354 {
8355 
8356 XmScaleCallbackStruct *cbs= (XmScaleCallbackStruct *) junk;
8357 
8358 filter_value=(float)cbs->value/100;
8359 
8361 write_screen();
8362 
8363 }
8364 void new_reverse_filter(Widget w,XtPointer data, XtPointer junk)
8365 
8366 {
8367 
8368 XmScaleCallbackStruct *cbs= (XmScaleCallbackStruct *) junk;
8369 
8370 reverse_filter_value=(float)cbs->value/100;
8371 
8373 write_screen();
8374 
8375 }
8376 void new_elevation_filter(Widget w,XtPointer data, XtPointer junk)
8377 
8378 {
8379 
8380 XmScaleCallbackStruct *cbs= (XmScaleCallbackStruct *) junk;
8381 
8382 elevation_filter_value=cbs->value;
8383 
8385 write_screen();
8386 
8387 }
8388 void new_dm(Widget w,XtPointer data, XtPointer junk)
8389 
8390 {
8391 
8392 XmScaleCallbackStruct *cbs= (XmScaleCallbackStruct *) junk;
8393 
8394 pxtemp=(float)cbs->value/100;
8395 
8396 dmvalue=pxtemp*100*3.28/.55;
8397 
8399 write_screen();
8400 
8401 }
8402 
8403 void make_gif()
8404 
8405 {
8406 
8407 
8408 int save_pcpn_time_step;
8409 int save_pcpn_time;
8410 int save_pcpn_day;
8411 int save_pcp_flag;
8412 int save_points_flag,save_grids_flag,save_map_flag;
8413 int save_fgbgflag;
8414 int save_add_topo_flag;
8415 int save_add_isohyet_flag;
8416 int save_plot_view;
8417 int save_kscale,save_zscale,save_tscale;
8418 int save_change_diff_flag,save_change_pcpn_flag,save_change_isohyet_flag,save_change_topo_flag;
8419 int save_change_frz_flag,save_change_rpcpn_flag,save_change_maxmin_flag;
8420 int save_flf_on,save_qpf_on,save_maxmin_on;
8421 int save_contour_pcp_flag,save_contour_maxmin_flag;
8422 float save_filter_value;
8423 int i;
8424 char cmd[1000];
8425 int argcount;
8426 Arg args[10];
8427 int save_off[100];
8428 int save_contour_topo_flag;
8429 int save_qflag[10];
8430 int save_dflag[10];
8431 int clayer,rlayer,wlayer,slayer;
8432 int x1,y1,MY=10;
8433 signed long XSIZE,YSIZE;
8434 float lat,lon,xrat,yrat,mult,cmult,dmult;
8435 long r,s;
8436 float conv=.0174;
8437 long xmin,ymin;
8438 Dimension width,height;
8439 int data;
8440 int m;
8441 char tbuf[1000];
8442 time_t ltime;
8443 struct tm *gm;
8444 int xsize,ysize;
8445 XmString msg;
8446 Widget e1;
8447 int jj;
8448 
8449 argcount=0;
8450 XtSetArg(args[argcount],XmNx,0);argcount++;
8451 XtSetArg(args[argcount],XmNy,0);argcount++;
8452 XtSetArg(args[argcount],XmNwidth,1280);argcount++;
8453 XtSetArg(args[argcount],XmNheight,1024);argcount++;
8454 XtSetValues(top_level,args,argcount);
8455 
8456 argcount=0;
8457 XtSetArg(args[argcount],XmNwidth,&width);argcount++;
8458 XtSetArg(args[argcount],XmNheight,&height);argcount++;
8459 XtGetValues(top_level,args,argcount);
8460 
8461 /*
8462 if(max_width-width > 100 || max_height-height > 100) {
8463 
8464  msg=XmStringCreateLocalized("Please Maximize display before creating GIFs");
8465 
8466  argcount=0;
8467  XtSetArg(args[argcount],XmNmessageString,msg);argcount++;
8468  XtSetArg(args[argcount],XmNdialogStyle,
8469  XmDIALOG_FULL_APPLICATION_MODAL);argcount++;
8470  e1=XmCreateErrorDialog(drawing_area,"info",args,argcount);
8471  XtUnmanageChild(XmMessageBoxGetChild(e1,XmDIALOG_HELP_BUTTON));
8472  XtUnmanageChild(XmMessageBoxGetChild(e1,XmDIALOG_CANCEL_BUTTON));
8473 
8474  XtManageChild(e1);
8475  XmStringFree(msg);
8476  return;
8477 
8478  }
8479 */
8480 XmUpdateDisplay(top_level);
8481 
8482 for(i=0;i<100;i++)
8483  save_off[i]=off[i];
8484 
8485 for(i=0;i<10;i++)
8486  save_qflag[i]=qflag[i];
8487 
8488 for(i=0;i<10;i++)
8489  qflag[i]=1;
8490 
8491 qflag[4]=-1;qflag[5]=-1;qflag[7]=-1;
8492 
8493 
8494 for(i=0;i<10;i++)
8495  save_dflag[i]=dflag[i];
8496 
8497 for(i=0;i<tsmax+2;i++) {
8498 
8499  if(i==0)
8500  dflag[i]=-1;
8501 
8502  else
8503  dflag[i]=1;
8504 
8505  }
8506 
8507 for(i=0;i<100;i++)
8508  off[i]=-1;
8509 
8510 clayer=-1;wlayer=-1;rlayer=-1;slayer=-1;
8511 
8512 jj=0;
8513 for(i=0;i<100;i++) {
8514 
8515  if(ktems[i].label==NULL)
8516  break;
8517 
8518  if(pars_line(ktems[i].label,"river",tbuf)!=NULL)
8519  rlayer=jj;
8520 
8521  if(pars_line(ktems[i].label,"water",tbuf)!=NULL)
8522  wlayer=jj;
8523 
8524  if(pars_line(ktems[i].label,"counties",tbuf)!=NULL)
8525  clayer=jj;
8526 
8527  if(pars_line(ktems[i].label,"states",tbuf)!=NULL)
8528  slayer=jj;
8529 
8530  if(i != topo_number && i != isoh_number)
8531  jj++;
8532 
8533 
8534  }
8535 
8536 if(pcpn_widget != NULL)
8537  XtUnmanageChild(pcpn_widget);
8538 
8539 if(z_widget != NULL)
8540  XtUnmanageChild(z_widget);
8541 
8542 if(maxmin_widget != NULL)
8543  XtUnmanageChild(maxmin_widget);
8544 
8545 save_points_flag=points_flag;
8546 save_grids_flag=grids_flag;
8547 save_map_flag=map_flag;
8548 save_pcpn_time_step=pcpn_time_step;
8549 save_pcpn_time=pcpn_time;
8550 save_pcpn_day=pcpn_day;
8551 save_pcp_flag=pcp_flag;
8552 save_fgbgflag=fgbgflag;
8553 save_contour_topo_flag=contour_topo_flag;
8554 save_add_topo_flag=add_topo_flag;
8555 save_add_isohyet_flag=add_isohyet_flag;
8556 save_plot_view=plot_view;
8557 save_change_diff_flag=change_diff_flag;
8558 save_change_pcpn_flag=change_pcpn_flag;
8559 save_change_rpcpn_flag=change_rpcpn_flag;
8560 save_change_frz_flag=change_frz_flag;
8561 save_change_isohyet_flag=change_isohyet_flag;
8562 save_change_topo_flag=change_topo_flag;
8563 save_kscale=kscale;
8564 save_zscale=zscale;
8565 save_tscale=tscale;
8566 save_filter_value=filter_value;
8567 save_flf_on=flf_on;
8568 save_qpf_on=qpf_on;
8569 save_maxmin_on=maxmin_on;
8570 save_change_maxmin_flag=change_maxmin_flag;
8571 save_contour_pcp_flag=contour_pcp_flag;
8572 save_contour_maxmin_flag=contour_maxmin_flag;
8573 
8574 filter_value=.01;
8575 
8576 XtSetArg(args[0],XtNwidth,&width);
8577 XtSetArg(args[1],XtNheight,&height);
8578 XtGetValues(drawing_area,args,2);
8579 
8580 XSIZE=(long)width*10L;
8581 YSIZE=(long)height*10L;
8582 
8583 xrat=(float)XSIZE/(float)12800;
8584 yrat=(float)YSIZE/(float)9600;
8585 
8586 if(xrat < yrat)
8587  mult=xrat;
8588 
8589 else
8590  mult=yrat;
8591 
8592 dmult=display_set[display_flag].dmult[0];
8593 xmin= display_set[display_flag].xmin[0];
8594 ymin= display_set[display_flag].ymin[0];
8595 cmult=mult*dmult;
8596 
8597 XSIZE=(display_set[display_flag].xmax[0]-
8598  display_set[display_flag].xmin[0])/10;
8599 YSIZE=(display_set[display_flag].ymax[0]-
8600  display_set[display_flag].ymin[0])/10;
8601 
8602 for(m=0;m<maxgif+1;m++) {
8603 
8604 if(m > 0) {
8605 
8606  lat=giflat[m];
8607  lon=giflon[m];
8608 
8609  r=dval.a * cos(lat*conv)/(1+sin(lat*conv))
8610  * cos((lon-dval.lo-90)*conv) + dval.xo +.5;
8611 
8612  s=dval.a * cos(lat*conv)/(1+sin(lat*conv))
8613  * sin((lon-dval.lo-90)*conv) + dval.yo + .5;
8614 
8615  x1=(xmin+(float)r * cmult)/MY;
8616  y1=(ymin+(float)s * cmult)/MY;
8617  zoom=1;
8618 
8619  opoint[0]=XSIZE/2;
8620  opoint[1]=YSIZE/2;
8621 
8622  redraw_map(x1,y1,Button1);
8623 
8624 
8625 }
8626 
8627 else {
8628 
8629  xsize=(display_set[display_flag].xmax[0]-
8630  display_set[display_flag].xmin[0])/10;
8631  ysize=(display_set[display_flag].ymax[0]-
8632  display_set[display_flag].ymin[0])/10;
8633 
8634  opoint[0]=xsize/2;
8635  opoint[1]=ysize/2;
8636  zoom=1;
8637 
8638  redraw_map(xsize/2,ysize/2,Button2);
8639 
8640  }
8641 
8642 
8643 XmUpdateDisplay(top_level);
8644 
8645 if(clayer!=-1)
8646  off[clayer]=1;
8647 
8648 if(rlayer != -1)
8649  off[rlayer]=1;
8650 
8651 if(wlayer != -1)
8652  off[wlayer]=1;
8653 
8654 if(slayer != -1)
8655  off[wlayer]=1;
8656 
8657 maxmin_on=-1;flf_on=-1;qpf_on=1;
8658 add_topo_flag=1;
8659 topo_select();
8661 contour_pcp_flag=-1;
8663 
8664 pcpn_time_step=1;
8665 map_flag=-1;
8666 points_flag=-1;
8667 grids_flag=1;
8668 
8669 fgbgflag=1;
8670 change_topo_flag=-1;
8672 change_frz_flag=-1;
8676 
8677 get_legend();
8678 kscale=2;
8679 
8680 for(i=0;i<maxdays;i++) {
8681 
8682  pcpn_day=i;
8683 
8684  if(pdata[pcpn_day].used[4] == 0 || pdata[pcpn_day].used[4] == 2 ||
8685  (pdata[pcpn_day].level==1 && pdata[pcpn_day].used[4] == 1))
8686  continue;
8687 
8688  write_screen();
8689 
8690  XmUpdateDisplay(top_level);
8691  ltime=pdata[i].data_time;
8692 
8693  gm=gmttime(&ltime);
8694 
8695  sprintf(tbuf,"%02d-%02d-%02d",gm->tm_mon+1,gm->tm_mday,gm->tm_year);
8696 
8697  sprintf(cmd,"/usr/bin/X11/xwd -id %d -out %s/grid.%s.%d.xwd",window,gif_file,tbuf,m);
8698  printf("%s\n", cmd);
8699  system(cmd);
8700  }
8701 
8702 map_flag=1;
8703 points_flag=-1;
8704 grids_flag=-1;
8705 
8706 for(i=0;i<maxdays;i++) {
8707 
8708  pcpn_day=i;
8709 
8710  if(pdata[pcpn_day].used[4] == 0 || pdata[pcpn_day].used[4] == 2 ||
8711  (pdata[pcpn_day].level==1 && pdata[pcpn_day].used[4] == 1))
8712  continue;
8713 
8714  write_screen();
8715 
8716  XmUpdateDisplay(top_level);
8717  ltime=pdata[i].data_time;
8718 
8719  gm=gmttime(&ltime);
8720 
8721  sprintf(tbuf,"%02d-%02d-%02d",gm->tm_mon+1,gm->tm_mday,gm->tm_year);
8722 
8723  sprintf(cmd,"/usr/bin/X11/xwd -id %d -out %s/map.%s.%d.xwd",window,gif_file,tbuf,m);
8724  printf("%s\n", cmd);
8725  system(cmd);
8726  }
8727 
8728 map_flag=-1;
8729 points_flag=1;
8730 grids_flag=-1;
8731 plot_view=4;
8732 
8733 add_topo_flag=-1;
8734 topo_select();
8736 change_pcpn_flag=-1;
8738 fgbgflag=-1;
8739 
8740 for(i=0;i<maxdays;i++) {
8741 
8742  pcpn_day=i;
8743 
8744  if(pdata[pcpn_day].used[4] == 0 || pdata[pcpn_day].used[4] == 2 ||
8745  (pdata[pcpn_day].level==1 && pdata[pcpn_day].used[4] == 1))
8746  continue;
8747 
8748  write_screen();
8749 
8750  XmUpdateDisplay(top_level);
8751  ltime=pdata[i].data_time;
8752 
8753  gm=gmttime(&ltime);
8754 
8755  sprintf(tbuf,"%02d-%02d-%02d",gm->tm_mon+1,gm->tm_mday,gm->tm_year);
8756 
8757  sprintf(cmd,"/usr/bin/X11/xwd -id %d -out %s/point.%s.%d.xwd",window,gif_file,tbuf,m);
8758  printf("%s\n", cmd);
8759  system(cmd);
8760  }
8761 
8762 pcpn_time_step=0;
8763 add_topo_flag=1;
8764 topo_select();
8766 
8767 map_flag=-1;
8768 points_flag=-1;
8769 grids_flag=1;
8770 
8771 fgbgflag=1;
8772 change_topo_flag=-1;
8774 change_frz_flag=-1;
8777 kscale=2;
8778 
8779 for(i=0;i<8;i++) {
8780 
8781  pcp_flag=i;
8782 
8783  pcpn_day=pcp_flag/4;
8784 
8785  pcpn_time=3-(pcp_flag-pcpn_day*4);
8786 
8787  if(pdata[pcpn_day].used[pcpn_time] == 0 || pdata[pcpn_day].used[pcpn_time] == 2 ||
8788  (pdata[pcpn_day].level==1 && pdata[pcpn_day].used[pcpn_time] == 1))
8789  continue;
8790 
8791  write_screen();
8792 
8793  XmUpdateDisplay(top_level);
8794 
8795  if(pcpn_time < 2)
8796  ltime=pdata[pcpn_day].data_time - 24L*3600L;
8797 
8798  else
8799  ltime=pdata[pcpn_day].data_time;
8800 
8801  gm=gmttime(&ltime);
8802 
8803  sprintf(tbuf,"%02d-%02d-%02d.%s",gm->tm_mon+1,gm->tm_mday,gm->tm_year,timefile[pcpn_time]);
8804 
8805  sprintf(cmd,"/usr/bin/X11/xwd -id %d -out %s/grid.%s.%d.xwd",window,gif_file,tbuf,m);
8806  printf("%s\n", cmd);
8807  system(cmd);
8808  }
8809 
8810 map_flag=1;
8811 points_flag=-1;
8812 grids_flag=-1;
8813 
8814 for(i=0;i<8;i++) {
8815 
8816  pcp_flag=i;
8817 
8818  pcpn_day=pcp_flag/4;
8819 
8820  pcpn_time=3-(pcp_flag-pcpn_day*4);
8821 
8822  if(pdata[pcpn_day].used[pcpn_time] == 0 || pdata[pcpn_day].used[pcpn_time] == 2 ||
8823  (pdata[pcpn_day].level==1 && pdata[pcpn_day].used[4] == 1))
8824  continue;
8825 
8826  write_screen();
8827 
8828  XmUpdateDisplay(top_level);
8829 
8830  if(pcpn_time < 2)
8831  ltime=pdata[pcpn_day].data_time - 24L*3600L;
8832 
8833  else
8834  ltime=pdata[pcpn_day].data_time;
8835 
8836  gm=gmttime(&ltime);
8837 
8838  sprintf(tbuf,"%02d-%02d-%02d.%s",gm->tm_mon+1,gm->tm_mday,gm->tm_year,timefile[pcpn_time]);
8839 
8840  sprintf(cmd,"/usr/bin/X11/xwd -id %d -out %s/map.%s.%d.xwd",window,gif_file,tbuf,m);
8841  printf("%s\n", cmd);
8842  system(cmd);
8843  }
8844 
8845 map_flag=-1;
8846 points_flag=1;
8847 grids_flag=-1;
8848 plot_view=4;
8849 
8850 add_topo_flag=-1;
8851 topo_select();
8853 change_pcpn_flag=-1;
8855 fgbgflag=-1;
8856 
8857 for(i=0;i<8;i++) {
8858 
8859  pcp_flag=i;
8860 
8861  pcpn_day=pcp_flag/4;
8862 
8863  pcpn_time=3-(pcp_flag-pcpn_day*4);
8864 
8865  if(pdata[pcpn_day].used[pcpn_time] == 0 || pdata[pcpn_day].used[pcpn_time] == 2 ||
8866  (pdata[pcpn_day].level==1 && pdata[pcpn_day].used[4] == 1))
8867  continue;
8868 
8869  write_screen();
8870 
8871  XmUpdateDisplay(top_level);
8872 
8873  if(pcpn_time < 2)
8874  ltime=pdata[pcpn_day].data_time - 24L*3600L;
8875 
8876  else
8877  ltime=pdata[pcpn_day].data_time;
8878 
8879  gm=gmttime(&ltime);
8880 
8881  sprintf(tbuf,"%02d-%02d-%02d.%s",gm->tm_mon+1,gm->tm_mday,gm->tm_year,timefile[pcpn_time]);
8882 
8883  sprintf(cmd,"/usr/bin/X11/xwd -id %d -out %s/point.%s.%d.xwd",window,gif_file,tbuf,m);
8884  printf("%s\n", cmd);
8885  system(cmd);
8886  }
8887 
8888 if(m > 0)
8889  continue;
8890 
8891 maxmin_on=-1;flf_on=1;qpf_on=-1;
8892 add_topo_flag=1;
8893 topo_select();
8895 
8896 pcpn_time_step=0;
8897 map_flag=-1;
8898 points_flag=-1;
8899 grids_flag=1;
8900 
8901 fgbgflag=1;
8902 change_topo_flag=-1;
8904 change_frz_flag=1;
8905 change_pcpn_flag=-1;
8907 zscale=0;
8908 
8909 get_legend();
8910 
8911 for(i=0;i<8;i++) {
8912 
8913  pcp_flag=i;
8914 
8915  pcpn_day=pcp_flag/4;
8916 
8917  pcpn_time=3-(pcp_flag-pcpn_day*4);
8918 
8919  if(zdata[pcpn_day].used[pcpn_time] == 0 || zdata[pcpn_day].used[pcpn_time] == 2 ||
8920  (zdata[pcpn_day].level[pcpn_time]==1 && zdata[pcpn_day].used[pcpn_time] == 1))
8921  continue;
8922 
8923  write_screen();
8924 
8925  XmUpdateDisplay(top_level);
8926 
8927  if(pcpn_time < 2)
8928  ltime=zdata[pcpn_day].data_time - 24L*3600L;
8929 
8930  else
8931  ltime=zdata[pcpn_day].data_time;
8932 
8933  gm=gmttime(&ltime);
8934 
8935  sprintf(tbuf,"%02d-%02d-%02d.%s",gm->tm_mon+1,gm->tm_mday,gm->tm_year,ztimefile[pcpn_time]);
8936 
8937  sprintf(cmd,"/usr/bin/X11/xwd -id %d -out %s/ozgrid.%s.%d.xwd",window,gif_file,tbuf,m);
8938  printf("%s\n", cmd);
8939  system(cmd);
8940 
8941  }
8942 
8943 map_flag=1;
8944 points_flag=-1;
8945 grids_flag=-1;
8946 
8947 for(i=0;i<8;i++) {
8948 
8949  pcp_flag=i;
8950 
8951  pcpn_day=pcp_flag/4;
8952 
8953  pcpn_time=3-(pcp_flag-pcpn_day*4);
8954 
8955  if(zdata[pcpn_day].used[pcpn_time] == 0 || zdata[pcpn_day].used[pcpn_time] == 2 ||
8956  (zdata[pcpn_day].level[pcpn_time]==1 && zdata[pcpn_day].used[pcpn_time] == 1))
8957  continue;
8958 
8959  write_screen();
8960 
8961  XmUpdateDisplay(top_level);
8962 
8963  if(pcpn_time < 2)
8964  ltime=zdata[pcpn_day].data_time - 24L*3600L;
8965 
8966  else
8967  ltime=zdata[pcpn_day].data_time;
8968 
8969 
8970  gm=gmttime(&ltime);
8971 
8972  sprintf(tbuf,"%02d-%02d-%02d.%s",gm->tm_mon+1,gm->tm_mday,gm->tm_year,ztimefile[pcpn_time]);
8973 
8974  sprintf(cmd,"/usr/bin/X11/xwd -id %d -out %s/ozma.%s.%d.xwd",window,gif_file,tbuf,m);
8975  printf("%s\n", cmd);
8976  system(cmd);
8977  }
8978 
8979 map_flag=-1;
8980 points_flag=1;
8981 grids_flag=-1;
8982 plot_view=4;
8983 
8984 add_topo_flag=-1;
8985 topo_select();
8987 change_pcpn_flag=-1;
8989 fgbgflag=-1;
8990 
8991 for(i=0;i<8;i++) {
8992 
8993  pcp_flag=i;
8994 
8995  pcpn_day=pcp_flag/4;
8996 
8997  pcpn_time=3-(pcp_flag-pcpn_day*4);
8998 
8999  if(zdata[pcpn_day].used[pcpn_time] == 0 || zdata[pcpn_day].used[pcpn_time] == 2 ||
9000  (zdata[pcpn_day].level[pcpn_time]==1 && zdata[pcpn_day].used[pcpn_time] == 1))
9001  continue;
9002  write_screen();
9003 
9004  XmUpdateDisplay(top_level);
9005 
9006  if(pcpn_time < 2)
9007  ltime=zdata[pcpn_day].data_time - 24L*3600L;
9008 
9009  else
9010  ltime=zdata[pcpn_day].data_time;
9011 
9012 
9013  gm=gmttime(&ltime);
9014 
9015  sprintf(tbuf,"%02d-%02d-%02d.%s",gm->tm_mon+1,gm->tm_mday,gm->tm_year,ztimefile[pcpn_time]);
9016 
9017  sprintf(cmd,"/usr/bin/X11/xwd -id %d -out %s/ozpoint.%s.%d.xwd",window,gif_file,tbuf,m);
9018  printf("%s\n", cmd);
9019  system(cmd);
9020  }
9021 
9022 maxmin_on=1;flf_on=-1;qpf_on=-1;
9023 add_topo_flag=1;
9024 topo_select();
9026 
9027 pcpn_time_step=0;
9028 map_flag=-1;
9029 points_flag=-1;
9030 grids_flag=1;
9031 
9032 fgbgflag=1;
9033 change_topo_flag=-1;
9035 change_frz_flag=-1;
9036 change_pcpn_flag=-1;
9039 
9040 tscale=2;
9041 
9042 get_legend();
9043 
9044 for(i=0;i<8;i++) {
9045 
9046  pcp_flag=i;
9047 
9048  pcpn_day=pcp_flag/4;
9049 
9050  pcpn_time=3-(pcp_flag-pcpn_day*4);
9051 
9052  if(tdata[pcpn_day].used[pcpn_time] == 0 || tdata[pcpn_day].used[pcpn_time] == 2 ||
9053  (tdata[pcpn_day].level[pcpn_time]==1 && tdata[pcpn_day].used[pcpn_time] == 1))
9054  continue;
9055 
9056  write_screen();
9057 
9058  XmUpdateDisplay(top_level);
9059 
9060  if(pcpn_time < 2)
9061  ltime=tdata[pcpn_day].data_time - 24L*3600L;
9062 
9063  else
9064  ltime=tdata[pcpn_day].data_time;
9065 
9066  gm=gmttime(&ltime);
9067 
9068  sprintf(tbuf,"%02d-%02d-%02d.%s",gm->tm_mon+1,gm->tm_mday,gm->tm_year,ttimefile[pcpn_time]);
9069 
9070  sprintf(cmd,"/usr/bin/X11/xwd -id %d -out %s/otgrid.%s.%d.xwd",window,gif_file,tbuf,m);
9071  printf("%s\n", cmd);
9072  system(cmd);
9073  }
9074 
9075 map_flag=1;
9076 points_flag=-1;
9077 grids_flag=-1;
9078 
9079 for(i=0;i<8;i++) {
9080 
9081  pcp_flag=i;
9082 
9083  pcpn_day=pcp_flag/4;
9084 
9085  pcpn_time=3-(pcp_flag-pcpn_day*4);
9086 
9087  if(tdata[pcpn_day].used[pcpn_time] == 0 || tdata[pcpn_day].used[pcpn_time] == 2 ||
9088  (tdata[pcpn_day].level[pcpn_time]==1 && tdata[pcpn_day].used[pcpn_time] == 1))
9089  continue;
9090 
9091  write_screen();
9092 
9093  XmUpdateDisplay(top_level);
9094 
9095  if(pcpn_time < 2)
9096  ltime=zdata[pcpn_day].data_time - 24L*3600L;
9097 
9098  else
9099  ltime=zdata[pcpn_day].data_time;
9100 
9101 
9102  gm=gmttime(&ltime);
9103 
9104  sprintf(tbuf,"%02d-%02d-%02d.%s",gm->tm_mon+1,gm->tm_mday,gm->tm_year,ttimefile[pcpn_time]);
9105 
9106  sprintf(cmd,"/usr/bin/X11/xwd -id %d -out %s/omat.%s.%d.xwd",window,gif_file,tbuf,m);
9107  printf("%s\n", cmd);
9108  system(cmd);
9109  }
9110 
9111 map_flag=-1;
9112 points_flag=1;
9113 grids_flag=-1;
9114 plot_view=4;
9115 
9116 add_topo_flag=-1;
9117 topo_select();
9119 fgbgflag=-1;
9120 
9121 for(i=0;i<8;i++) {
9122 
9123  pcp_flag=i;
9124 
9125  pcpn_day=pcp_flag/4;
9126 
9127  pcpn_time=3-(pcp_flag-pcpn_day*4);
9128 
9129  if(tdata[pcpn_day].used[pcpn_time] == 0 || tdata[pcpn_day].used[pcpn_time] == 2 ||
9130  (tdata[pcpn_day].level[pcpn_time]==1 && tdata[pcpn_day].used[pcpn_time] == 1))
9131  continue;
9132  write_screen();
9133 
9134  XmUpdateDisplay(top_level);
9135 
9136  if(pcpn_time < 2)
9137  ltime=zdata[pcpn_day].data_time - 24L*3600L;
9138 
9139  else
9140  ltime=zdata[pcpn_day].data_time;
9141 
9142 
9143  gm=gmttime(&ltime);
9144 
9145  sprintf(tbuf,"%02d-%02d-%02d.%s",gm->tm_mon+1,gm->tm_mday,gm->tm_year,ttimefile[pcpn_time]);
9146 
9147  sprintf(cmd,"/usr/bin/X11/xwd -id %d -out %s/otpoint.%s.%d.xwd",window,gif_file,tbuf,m);
9148  printf("%s\n", cmd);
9149  system(cmd);
9150  }
9151 
9152 }
9153 
9154 points_flag=save_points_flag;
9155 grids_flag=save_grids_flag;
9156 map_flag=save_map_flag;
9157 pcpn_time_step=save_pcpn_time_step;
9158 pcpn_time=save_pcpn_time;
9159 pcpn_day=save_pcpn_day;
9160 pcp_flag=save_pcp_flag;
9161 fgbgflag=save_fgbgflag;
9162 contour_topo_flag=save_contour_topo_flag;
9163 add_topo_flag=save_add_topo_flag;
9164 add_isohyet_flag=save_add_isohyet_flag;
9165 plot_view=save_plot_view;
9166 change_topo_flag=save_change_topo_flag;
9167 change_diff_flag=save_change_diff_flag;
9168 change_pcpn_flag=save_change_pcpn_flag;
9169 change_rpcpn_flag=save_change_rpcpn_flag;
9170 change_isohyet_flag=save_change_isohyet_flag;
9171 change_frz_flag=save_change_frz_flag;
9172 change_maxmin_flag=save_change_maxmin_flag;
9173 kscale=save_kscale;
9174 zscale=save_zscale;
9175 tscale=save_tscale;
9176 filter_value=save_filter_value;
9177 flf_on=save_flf_on;
9178 qpf_on=save_qpf_on;
9179 maxmin_on=save_maxmin_on;
9180 contour_pcp_flag=save_contour_pcp_flag;
9181 contour_maxmin_flag=save_contour_maxmin_flag;
9182 
9183 get_legend();
9184 
9185 for(i=0;i<100;i++)
9186  off[i]=save_off[i];
9187 
9188 for(i=0;i<10;i++)
9189  qflag[i]=save_qflag[i];
9190 
9191 for(i=0;i<10;i++)
9192  dflag[i]=save_dflag[i];
9193 
9194 write_screen();
9195 
9196 XtManageChild(pcpn_widget);
9197 
9198 berror(drawing_area,"GIF images completed");
9199 
9200 }
9201 
9203 
9204 {
9205 
9206 
9207 FILE *fp;
9208 int i,j,k;
9209 int zday,reason;
9210 char *p;
9211 char buf[1000];
9212 char hb5[100];
9213 int ier;
9214 
9215 for(j=0;j<maxdays;j++) {
9216 
9217 for(i=0;i<max_stations;i++) {
9218 
9219 for(k=0;k<5;k++)
9220  pdata[j].stn[i].snoflag[k]=0;
9221 
9222 }
9223 
9224 }
9225 
9226 fp=fopen("/usr/local/apps/mm/archive/bad_snotel","r");
9227 
9228 if(fp==NULL)
9229  return;
9230 
9231 
9232 for(;;) {
9233 
9234  p=fgets(buf,100,fp);
9235 
9236  if(p==NULL)
9237  break;
9238 
9239 
9240  ier=sscanf(buf,"%s",hb5);
9241 
9242  for(i=0;i<max_stations;i++) {
9243 
9244  if(strcasecmp(hb5,station[i].hb5)==0) {
9245 
9246 
9247  for(;;) {
9248 
9249  p=fgets(buf,100,fp);
9250 
9251  if(p==NULL)
9252  break;
9253 
9254  if(strstr(buf,"END")!=NULL)
9255  break;
9256 
9257  ier=sscanf(buf,"%d %d",&zday,&reason);
9258 
9259  for(j=0;j<maxdays;j++) {
9260 
9261  if(pdata[j].ztime==zday) {
9262 
9263  for(k=0;k<5;k++){
9264 
9265  pdata[j].stn[i].snoflag[k]=reason;
9266 
9267  }
9268 
9269  }
9270 
9271  }
9272 
9273 
9274  }
9275 
9276  break;
9277 
9278  }
9279 
9280 
9281  }
9282 
9283  }
9284 
9285 
9286 }
9287 
void update_bad_tvalues(int iday)
Definition: bad_tvalues.c:181
void read_bad_tvalues(char *fname, int m)
Definition: bad_tvalues.c:4
void restore_bad_tvalues(int iday)
Definition: bad_tvalues.c:247
void write_bad_tvalues(char *fname, int iday)
Definition: bad_tvalues.c:144
void write_bad_values(char *fname, int iday)
Definition: bad_values.c:141
void restore_bad_values(int iday)
Definition: bad_values.c:242
void read_bad_values(char *fname, int m)
Definition: bad_values.c:4
void update_bad_values(int iday)
Definition: bad_values.c:186
void quality_control_stations(int j)
Definition: bu.c:4
char s
Definition: build_list.c:122
char t
Definition: build_list.c:122
void calculate_zlevel()
void check_consistency(int j)
int points_flag
Definition: daily_qc.c:283
int add_isohyet_flag
Definition: daily_qc.c:256
int tscale
Definition: daily_qc.c:10
void area_select(Widget w, XtPointer data)
Definition: daily_qc.c:2247
struct station tstation[1000]
Definition: daily_qc.c:197
int ilegend_save
Definition: daily_qc.c:257
void change_maxmin_edit_mode()
Widget main_window
Definition: daily_qc.c:214
unsigned long mnmap[16]
Definition: daily_qc.c:226
int rs
Definition: daily_qc.c:271
void send_callback()
char tgrid_out[1000]
Definition: daily_qc.c:180
char gifbuf[1000]
Definition: daily_qc.c:92
void apply_tgroup()
Definition: daily_qc.c:5623
char zstation_list_custom_file[1000]
Definition: daily_qc.c:174
float stddev
Definition: daily_qc.c:273
Cursor crosshair_cursor
Definition: daily_qc.c:221
float delim[15][16]
Definition: daily_qc.c:128
int maxtscale
Definition: daily_qc.c:11
void min_select()
Definition: daily_qc.c:6062
void change_rsmode()
char * mon[]
Definition: daily_qc.c:13
int change_rpcpn_flag
Definition: daily_qc.c:266
Widget group_dialog
Definition: daily_qc.c:68
void berror(Widget widget, char *string)
Definition: daily_qc.c:6411
int tcmode
Definition: daily_qc.c:29
struct pcp * tpf
Definition: daily_qc.c:279
int dmvalue
Definition: daily_qc.c:41
int pcpn_time
Definition: daily_qc.c:248
int old_isom
Definition: daily_qc.c:141
Widget rowcol1
Definition: daily_qc.c:53
char rec_found[50]
Definition: daily_qc.c:147
int plot_view
Definition: daily_qc.c:200
int contour_pcp_flag
Definition: daily_qc.c:235
Widget fgbg_toggle_button
Definition: daily_qc.c:55
Widget bmain_window
Definition: daily_qc.c:115
struct station zstation[500]
Definition: daily_qc.c:196
void new_elevation_filter()
float reverse_filter_value
Definition: daily_qc.c:121
void handle_resize()
unsigned int w_logo[4]
Definition: daily_qc.c:211
XFontStruct * info_font[10]
Definition: daily_qc.c:230
void change_pcpn_time()
char rsel_file[1000]
Definition: daily_qc.c:184
double cen_lon
Definition: daily_qc.c:190
Widget mwidget[50]
Definition: daily_qc.c:193
int legendysize
Definition: daily_qc.c:271
int contour_isoh_flag
Definition: daily_qc.c:252
void change_pcp_scaling_mode()
int pcpn_time_step
Definition: daily_qc.c:238
void save_selection2()
int render_all
Definition: daily_qc.c:72
void quit()
Definition: daily_qc.c:5866
int legend_save
Definition: daily_qc.c:263
int mmflag
Definition: daily_qc.c:64
void test_menu()
Definition: daily_qc.c:864
Widget scwidget[3]
Definition: daily_qc.c:216
unsigned long mmap[16]
Definition: daily_qc.c:226
int min_number
Definition: daily_qc.c:76
Widget err
Definition: daily_qc.c:163
Widget dcwidget[3]
Definition: daily_qc.c:35
int change_frz_flag
Definition: daily_qc.c:61
int maxgif
Definition: daily_qc.c:89
int pbase[]
Definition: daily_qc.c:8
void change_group_qual()
void kill_widget(Widget widget, XtPointer client_data, XtPointer call_data)
Definition: daily_qc.c:6473
int pcp_in_use[500]
Definition: daily_qc.c:243
void screening_options()
void change_tedit_stations()
Definition: daily_qc.c:3680
int add_topo_flag
Definition: daily_qc.c:260
void quit_all2()
Definition: daily_qc.c:5838
int quit_flag
Definition: daily_qc.c:164
int change_pcpn_flag
Definition: daily_qc.c:265
void change_method(Widget w, XtPointer data, XmDrawingAreaCallbackStruct *call_data)
Definition: daily_qc.c:2239
void allocate_colors()
int edit_stations_flag
Definition: daily_qc.c:202
int display_method
Definition: daily_qc.c:112
int maxkscale
Definition: daily_qc.c:270
int dcmode
Definition: daily_qc.c:33
GC gc1
Definition: daily_qc.c:101
int change_isohyet_flag
Definition: daily_qc.c:264
int max_stations
Definition: daily_qc.c:199
Widget abwidget[3]
Definition: daily_qc.c:39
void change_edit_stations()
Definition: daily_qc.c:3077
Widget z_widget
Definition: daily_qc.c:217
Widget find_widget
Definition: daily_qc.c:218
char hrap_gage_file[1000]
Definition: daily_qc.c:186
Widget BuildPulldownPushMenu(Widget parent, char *menu_title, char menu_mnemonic, struct MenuItem *items)
Definition: daily_qc.c:1115
Widget diswidget[6]
Definition: daily_qc.c:218
int maxdays
Definition: daily_qc.c:85
int elevation_filter_value
Definition: daily_qc.c:120
int max_height
Definition: daily_qc.c:267
int change_topo_flag
Definition: daily_qc.c:261
Widget top_level
Definition: daily_qc.c:214
int zoom_once
Definition: daily_qc.c:253
int yh_logo[4]
Definition: daily_qc.c:212
int error_widget_flag
Definition: daily_qc.c:242
void map_select(Widget w, XtPointer data, XtPointer call_data)
Definition: daily_qc.c:6108
int mnlegend_save
Definition: daily_qc.c:259
Widget min_toggle_button
Definition: daily_qc.c:81
int main(int argc, char **argv)
Definition: daily_qc.c:353
struct stn_values * stn_values
Definition: daily_qc.c:99
char basin_file[1000]
Definition: daily_qc.c:175
struct pcp * pcp
Definition: daily_qc.c:277
int forecast_basins_flag
Definition: daily_qc.c:134
void handle_mouse()
void change_pcpn_edit_mode()
int rsmode
Definition: daily_qc.c:43
int scale
Definition: daily_qc.c:97
void foreground_select()
Definition: daily_qc.c:5912
Pixmap pixb
Definition: daily_qc.c:209
int qpf_on
Definition: daily_qc.c:48
int zscale
Definition: daily_qc.c:60
void cancel_dbase2()
Definition: daily_qc.c:6712
Widget awidget[10]
Definition: daily_qc.c:216
XtAppContext app
Definition: daily_qc.c:294
unsigned long vmap[50]
Definition: daily_qc.c:225
int mday[]
Definition: daily_qc.c:695
Widget rowcol18
Definition: daily_qc.c:34
void new_dm()
Widget draw_dialog[10]
Definition: daily_qc.c:114
unsigned long rmap[16]
Definition: daily_qc.c:226
double min_lat
Definition: daily_qc.c:190
int begin_hour
Definition: daily_qc.c:149
int tlegend_save
Definition: daily_qc.c:263
int off[100]
Definition: daily_qc.c:289
void get_default_area()
Definition: daily_qc.c:585
int bmax_width
Definition: daily_qc.c:96
void write_screen()
Definition: daily_qc.c:1623
char topo_buf[100]
Definition: daily_qc.c:124
Widget bdwidget[5]
Definition: daily_qc.c:216
int wfo_orig
Definition: daily_qc.c:102
void send_dbase2()
Definition: daily_qc.c:6579
char hrap_zgage_file[1000]
Definition: daily_qc.c:187
char hrap_tgage_file[1000]
Definition: daily_qc.c:15
int dflag[10]
Definition: daily_qc.c:293
Widget edwidget[5]
Definition: daily_qc.c:216
int find_station_flag
Definition: daily_qc.c:165
char obs_archive_file[1000]
Definition: daily_qc.c:136
char defarea[20]
Definition: daily_qc.c:6
void create_options(Widget parent, XtCallbackProc callback, int active, char **labels, int n)
Definition: daily_qc.c:3057
void display_pcpn_options()
int linear
Definition: daily_qc.c:97
unsigned long qmap[16]
Definition: daily_qc.c:225
char station_climo_file[1000]
Definition: daily_qc.c:107
int pcpn_day
Definition: daily_qc.c:248
Widget dbase_dialog
Definition: daily_qc.c:163
GC gc
Definition: daily_qc.c:224
int pcp_flag
Definition: daily_qc.c:246
struct bad_daily_values bad_tvalues[6000]
Definition: daily_qc.c:153
void change_dcmode()
int xh_logo[4]
Definition: daily_qc.c:212
int begin_year
Definition: daily_qc.c:149
void change_z_time()
int begin_day
Definition: daily_qc.c:149
char * ttimefile[]
Definition: daily_qc.c:145
char tpoint2_file[1000]
Definition: daily_qc.c:178
void quit_all()
char hrap_file[1000]
Definition: daily_qc.c:175
char tdbase_out[1000]
Definition: daily_qc.c:182
char scratch_file[1000]
Definition: daily_qc.c:137
float topo_scale
Definition: daily_qc.c:122
unsigned long tmap[50]
Definition: daily_qc.c:225
struct hrap_grid * hrap_grid
Definition: daily_qc.c:285
int first
Definition: daily_qc.c:93
Widget scrollbar
Definition: daily_qc.c:215
time_t btim
Definition: daily_qc.c:140
void clear_backgrounds()
Definition: daily_qc.c:633
int current_raster
Definition: daily_qc.c:236
char zgrid_out[1000]
Definition: daily_qc.c:180
char zdbase_out[1000]
Definition: daily_qc.c:181
void clear_drawable(Drawable pixw)
Definition: daily_qc.c:1607
int bmax_height
Definition: daily_qc.c:96
int end_year
Definition: daily_qc.c:203
signed long xclip
Definition: daily_qc.c:274
Widget bdrawing_area[10]
Definition: daily_qc.c:113
void cancel_dbase()
Definition: daily_qc.c:6729
int isohyets_used
Definition: daily_qc.c:192
int wfo_all
Definition: daily_qc.c:104
unsigned long xmap[16]
Definition: daily_qc.c:225
void ok_dbase()
Definition: daily_qc.c:6721
Window bwindow[20]
Definition: daily_qc.c:110
String fallbacks[]
Definition: daily_qc.c:296
time_t tim
Definition: daily_qc.c:154
char station_list_custom_file[1000]
Definition: daily_qc.c:173
int begin_month
Definition: daily_qc.c:149
Widget start_dialog
Definition: daily_qc.c:215
void cance_dbase2()
Widget tcwidget[3]
Definition: daily_qc.c:31
void quality_select()
int iscale
Definition: daily_qc.c:269
Display * display
Definition: daily_qc.c:228
void change_max_days()
char gif_file[1000]
Definition: daily_qc.c:91
unsigned long zmap[16]
Definition: daily_qc.c:225
int posit
Definition: daily_qc.c:255
signed long yclip
Definition: daily_qc.c:274
int max_zstations
Definition: daily_qc.c:45
void area_callback(Widget w, XtPointer client_data, XtPointer call_data)
Definition: daily_qc.c:1080
Widget tpbutton[3]
Definition: daily_qc.c:215
Widget rowcol10
Definition: daily_qc.c:54
void isohyet_select()
Definition: daily_qc.c:5969
Widget daywidget
Definition: daily_qc.c:84
unsigned long nmap[16]
Definition: daily_qc.c:225
Font font[10]
Definition: daily_qc.c:231
void topo_select()
Definition: daily_qc.c:5923
int map_flag
Definition: daily_qc.c:283
unsigned long cmap[16]
Definition: daily_qc.c:226
int init_maxmin
Definition: daily_qc.c:19
char tgrid_file[1000]
Definition: daily_qc.c:178
int emonth
Definition: daily_qc.c:142
char tstation_climo_file[1000]
Definition: daily_qc.c:16
void apply_group()
Definition: daily_qc.c:5543
Pixmap logo[4]
Definition: daily_qc.c:210
char * ztimefile[]
Definition: daily_qc.c:146
int odisplay_flag
Definition: daily_qc.c:151
Cursor dotbox_cursor
Definition: daily_qc.c:222
void quit_callback()
Definition: daily_qc.c:5892
int first_through
Definition: daily_qc.c:166
Widget menu_bar
Definition: daily_qc.c:214
char proc_pcpn_file[1000]
Definition: daily_qc.c:175
float filter_value
Definition: daily_qc.c:119
char pcpn_file[1000]
Definition: daily_qc.c:175
int abmode
Definition: daily_qc.c:37
void get_bad_snotel()
Definition: daily_qc.c:9202
void change_begin_date(Widget w, XtPointer data, XtPointer junk)
Definition: daily_qc.c:697
char type[5]
Definition: daily_qc.c:98
void make_gif()
Definition: daily_qc.c:8403
void change_tcmode()
char mat_file[1000]
Definition: daily_qc.c:185
int max_number
Definition: daily_qc.c:75
int qflag[10]
Definition: daily_qc.c:293
int contour_maxmin_flag
Definition: daily_qc.c:18
int data_view
Definition: daily_qc.c:94
void send_expose()
Definition: daily_qc.c:6117
void new_filter()
int max_width
Definition: daily_qc.c:267
int max_tstations
Definition: daily_qc.c:46
char zpoint2_file[1000]
Definition: daily_qc.c:177
Widget rowcol16
Definition: daily_qc.c:38
int manage_flag
Definition: daily_qc.c:239
char zmap_out[1000]
Definition: daily_qc.c:181
int opoint[2]
Definition: daily_qc.c:289
Widget view_widget
Definition: daily_qc.c:218
char map_out[1000]
Definition: daily_qc.c:179
char basin_climo_file[1000]
Definition: daily_qc.c:176
struct pcp * spf
Definition: daily_qc.c:278
char zpoint1_file[1000]
Definition: daily_qc.c:177
char station_list_file[1000]
Definition: daily_qc.c:173
char ngrid_file[1000]
Definition: daily_qc.c:188
int group_qual
Definition: daily_qc.c:67
void bmessage()
Widget AttachToCascade(Widget parent, char *label, Widget sub_menu)
Definition: daily_qc.c:1225
int exp_flag
Definition: daily_qc.c:250
char tstation_list_custom_file[1000]
Definition: daily_qc.c:174
void send_dbase()
Definition: daily_qc.c:6490
int gage_char[2]
Definition: daily_qc.c:161
int end_index
Definition: daily_qc.c:203
int flf_on
Definition: daily_qc.c:47
int func[]
Definition: daily_qc.c:159
int end_month
Definition: daily_qc.c:203
char dbase_out[1000]
Definition: daily_qc.c:179
unsigned long amap[16]
Definition: daily_qc.c:226
Widget pcpn_widget
Definition: daily_qc.c:217
char tmap_out[1000]
Definition: daily_qc.c:182
char map_file[1000]
Definition: daily_qc.c:179
float giflat[5]
Definition: daily_qc.c:90
void change_plot()
Widget rowcol15
Definition: daily_qc.c:40
char dbase_in[1000]
Definition: daily_qc.c:179
int init_subdisplay
Definition: daily_qc.c:109
int zoom
Definition: daily_qc.c:289
struct MenuItem ktems[100]
Definition: daily_qc.c:240
void save_dbase()
Definition: daily_qc.c:6740
void change_begin_color(Widget w, XtPointer data, XtPointer junk)
Definition: daily_qc.c:667
struct MenuItem area_items[10]
Definition: daily_qc.c:241
Pixmap pixm
Definition: daily_qc.c:208
Window root_win
Definition: daily_qc.c:229
char grid_file[1000]
Definition: daily_qc.c:183
char * timefile[]
Definition: daily_qc.c:144
int wfo_in_use[20]
Definition: daily_qc.c:103
unsigned int h_logo[4]
Definition: daily_qc.c:211
char forecast_basin_file[1000]
Definition: daily_qc.c:131
int frzlvl_flag
Definition: daily_qc.c:156
int tsmax
Definition: daily_qc.c:87
void change_pcpn_zoom_mode()
int legendxsize
Definition: daily_qc.c:271
int current_date_pointer
Definition: daily_qc.c:237
Widget rpbutton
Definition: daily_qc.c:52
Window window
Definition: daily_qc.c:229
int fgbgflag
Definition: daily_qc.c:244
void create_area_menu()
Definition: daily_qc.c:913
Widget drawing_area
Definition: daily_qc.c:214
Widget mbutton[100]
Definition: daily_qc.c:62
Widget topo_toggle_button
Definition: daily_qc.c:78
int end_day
Definition: daily_qc.c:203
char zgrid_file[1000]
Definition: daily_qc.c:177
int simsnow
Definition: daily_qc.c:97
int maxmin_on
Definition: daily_qc.c:49
Widget s_text
Definition: daily_qc.c:214
char grid_out[1000]
Definition: daily_qc.c:180
char rfc[100]
Definition: daily_qc.c:138
float pxtemp
Definition: daily_qc.c:25
int begin_index
Definition: daily_qc.c:149
void change_z_edit_mode()
int npoint[2]
Definition: daily_qc.c:289
struct maxmin * maxmin
Definition: daily_qc.c:22
unsigned long imap[16]
Definition: daily_qc.c:225
int isom
Definition: daily_qc.c:141
void layer_select()
void source_select()
void change_maxmin_time()
int map_edit_flag
Definition: daily_qc.c:201
int change_map_flag
Definition: daily_qc.c:249
Widget rswidget[3]
Definition: daily_qc.c:42
Region region
Definition: daily_qc.c:207
void change_zedit_stations()
Definition: daily_qc.c:4113
unsigned long dmap[16]
Definition: daily_qc.c:130
Widget edit_dialog
Definition: daily_qc.c:100
int contour_topo_flag
Definition: daily_qc.c:251
int maxzscale
Definition: daily_qc.c:59
int group_edit
Definition: daily_qc.c:66
int topo_number
Definition: daily_qc.c:73
long int grey
Definition: daily_qc.c:24
Widget BuildPulldownToggleMenu(Widget parent, char *menu_title, char menu_mnemonic, struct MenuItem *items)
Definition: daily_qc.c:1143
char tpoint1_file[1000]
Definition: daily_qc.c:178
int method
Definition: daily_qc.c:254
void change_character()
void kill_dialog()
XColor colors[256]
Definition: daily_qc.c:58
int kscale
Definition: daily_qc.c:269
void Create_Colors(Display *pdisplay)
Definition: daily_qc.c:1240
void change_abmode()
int maxmin_used
Definition: daily_qc.c:17
int isoh_number
Definition: daily_qc.c:74
int funct[]
Definition: daily_qc.c:158
int end_hour
Definition: daily_qc.c:203
Dimension owidth
Definition: daily_qc.c:275
Widget area_menu
Definition: daily_qc.c:214
struct maplayer * smaplayer[100]
Definition: daily_qc.c:291
int simflow
Definition: daily_qc.c:97
void max_select()
Definition: daily_qc.c:6016
Widget gpbutton
Definition: daily_qc.c:51
int new_day_hour
Definition: daily_qc.c:27
Widget isoh_toggle_button
Definition: daily_qc.c:79
unsigned car[100]
Definition: daily_qc.c:290
Widget bwidget[10]
Definition: daily_qc.c:216
int smonth
Definition: daily_qc.c:142
int change_diff_flag
Definition: daily_qc.c:126
Widget CreateMenuButton(char *name, Widget parent, XtCallbackProc callback, XtPointer data, char mnemonic)
Definition: daily_qc.c:845
Widget maxmin_widget
Definition: daily_qc.c:217
int maxiscale
Definition: daily_qc.c:270
char hrap_grid_mask_file[1000]
Definition: daily_qc.c:117
int qlegend_save
Definition: daily_qc.c:258
char snow_file[1000]
Definition: daily_qc.c:70
void handle_expose()
float giflon[5]
Definition: daily_qc.c:90
int grids_flag
Definition: daily_qc.c:283
Widget max_toggle_button
Definition: daily_qc.c:80
int change_maxmin_flag
Definition: daily_qc.c:262
XImage * image
Definition: daily_qc.c:205
int add_min_flag
Definition: daily_qc.c:21
int add_max_flag
Definition: daily_qc.c:20
Cursor watch_cursor
Definition: daily_qc.c:220
void other_pcpn_options()
int display_flag
Definition: daily_qc.c:268
void new_reverse_filter()
void find_name()
double max_lat
Definition: daily_qc.c:190
Widget rowcol17
Definition: daily_qc.c:30
void clear_error_widget()
Definition: daily_qc.c:6482
int legendystart
Definition: daily_qc.c:271
int fgbg_number
Definition: daily_qc.c:56
Dimension oheight
Definition: daily_qc.c:275
char qual[10]
Definition: display_data.c:29
static int depth
Definition: display_data.c:19
void time_series()
void edit_maxminstations(int win_x, int win_y, unsigned int win_button)
void edit_stations(int win_x, int win_y, unsigned int win_button)
Definition: edit_stations.c:14
void edit_zstations(int win_x, int win_y, unsigned int win_button)
void estimate_daily_stations(int j)
void estimate_daily_tstations(int j)
void estimate_missing_stations(int j)
void estimate_missing_tstations(int j)
void estimate_partial_stations(int j)
void get_hrap_coord(double maximum_latitude, double minimum_latitude, double center_longitude, int smonth, int emonth)
Definition: get_hrap_coord.c:4
void get_tgage_grid(double maximum_latitude, double minimum_latitude, double center_longitude)
Definition: get_tgage_grid.c:4
void get_zgage_grid(double maximum_latitude, double minimum_latitude, double center_longitude)
Definition: get_zgage_grid.c:4
void get_zlevel(int j)
Definition: get_zlevel.c:4
struct tm * gmttime(time_t *secs)
Definition: gmttime.c:5
void group_edit_stations(int win_x, int win_y, unsigned int win_button)
void group_edit_tstations(int win_x, int win_y, unsigned int win_button)
read_maps((char *) data, smonth, emonth)
fr
Definition: jnk.c:17
printf("pcp %d\n", pcp_in_use[103])
exit(1)
get_hrap_mask(hrap_grid_mask_file)
void make_map(int)
void redraw_pcpn_legend(Drawable)
void get_station_list(char *)
void draw_map(Drawable, int, int)
int read_precip_a(char *, time_t, int)
Definition: read_precip_a.c:3
void plot_topo(Pixmap, int, int)
long ouptime(int, int, int, int, int, int)
void render_pcp(int, int, int)
void contour_topo(Pixmap, int, int)
char * pars_line(char *, char *, char *)
void change_legend_display(int, int)
void plot_stations(Pixmap, int, int, int)
void get_area_menu(FILE *)
void change_pcpn_legend(int, int)
void plot_map(Pixmap, int, int, int)
void redraw_legend_display(Drawable)
void XmtWaitUntilMapped(Widget)
void redraw_map(int, int, unsigned int)
void redraw_topo_legend(Drawable)
void change_topo_legend(int, int)
void contour_pcpn(Pixmap pixm, int, int, char *, int)
void plot_pcpn(Pixmap pixm, int, int, char *, int)
void get_basin_data(char *, char *)
int read_precip_b(char *, time_t, int)
Definition: read_precip_b.c:4
void read_archived_data(char *, char *, char *, time_t, char *)
void contour_isohyets(int, Pixmap, int, int)
void plot_isohyets(int, Pixmap, int, int)
void write_archived_obs_data(char *, char *, char *, time_t, char *)
int read_qpf_grids(int k, char *fname)
void write_qpf_grids(char *fname)
void plot_zstations(Drawable pix, int type, int h, int display_flag)
Definition: plot_stations.c:5
void plot_tstations(Drawable pix, int type, int h, int display_flag)
Definition: plot_tstations.c:5
void quality_control_tstations(int j)
int read_snow(char *fname, int i)
Definition: read_snow.c:3
int read_t_a(char *fname, time_t tget, int i)
Definition: read_t_a.c:3
int read_t_b(char *fname, time_t tget, int i)
Definition: read_t_b.c:3
int read_zlevel_a(char *fname, time_t tget, int i)
Definition: read_zlevel_a.c:3
int read_zlevel_b(char *fname, time_t tget, int i)
Definition: read_zlevel_b.c:3
void render_z(int pcpn_day, int pcpn_time, int pcpn_time_step)
Definition: render_z.c:12
Definition: misc.h:386
char * label
Definition: misc.h:388
void(* callback)()
Definition: misc.h:390
XtPointer callback_data
Definition: misc.h:391
Definition: misc.h:2
int used
Definition: misc.h:4
float dmult[4]
Definition: misc.h:540
long xmin[4]
Definition: misc.h:534
long xmax[4]
Definition: misc.h:536
long ymax[4]
Definition: misc.h:537
long xoff[4]
Definition: misc.h:532
long ymin[4]
Definition: misc.h:535
long yoff[4]
Definition: misc.h:533
long ycen[4]
Definition: misc.h:539
long xcen[4]
Definition: misc.h:538
Definition: misc.h:397
double lo
Definition: misc.h:402
double a
Definition: misc.h:399
double yo
Definition: misc.h:401
double xo
Definition: misc.h:400
Definition: misc.h:465
Definition: misc.h:173
char bchar[5]
Definition: misc.h:178
char hb5[10]
Definition: misc.h:175
float * tgz
Definition: misc_new.h:338
float mz[100]
Definition: misc.h:185
float * zgz
Definition: misc_new.h:334
float * tuz
Definition: misc_new.h:339
float * tmz
Definition: misc_new.h:340
float * zuz
Definition: misc_new.h:335
float gz[100]
Definition: misc.h:183
float lz[100]
Definition: misc.h:186
float * zlz
Definition: misc_new.h:337
float * tlz
Definition: misc_new.h:341
float * zmz
Definition: misc_new.h:336
float uz[100]
Definition: misc.h:184
Definition: misc.h:370
Definition: misc.h:523
Definition: misc.h:216
time_t data_time
Definition: misc.h:218
float stddev
Definition: misc.h:220
int used[5]
Definition: misc.h:219
struct stn stn[1500]
Definition: misc.h:222
Definition: misc.h:191
Definition: misc.h:151
Definition: misc.h:232
float lat
Definition: misc.h:239
float lon
Definition: misc.h:240
Definition: misc.h:98
Definition: misc.h:200
struct rain rain[5]
Definition: misc.h:202
short int * scons
Definition: misc_new.h:380
short int * snoflag
Definition: misc_new.h:384
struct rain frain[5]
Definition: misc.h:203
short int * sflag
Definition: misc_new.h:385
int frzlvl[5]
Definition: misc.h:204
struct rain * srain
Definition: misc_new.h:386
Definition: misc_new.h:61
time_t data_time
Definition: misc_new.h:447
int used[6]
Definition: misc_new.h:449
float stddev
Definition: misc_new.h:450
struct ttn stn[1000]
Definition: misc_new.h:452
Definition: misc.h:450
Definition: misc_new.h:35
struct tlevel * tlevel2
Definition: misc_new.h:411
struct tlevel * tlevel1
Definition: misc_new.h:410
struct ztn stn[500]
Definition: misc_new.h:442
int used[5]
Definition: misc_new.h:439
time_t data_time
Definition: misc_new.h:437
struct zlevel * zlevel2
Definition: misc_new.h:394
struct zlevel * zlevel1
Definition: misc_new.h:393