Mapper
new_read_maps_new.c
Go to the documentation of this file.
1 
2 #include "prototypes_new.h"
3 
4 void read_maps(char *sfname,int smonth,int emonth)
5 
6 {
7 extern int fgbg_number;
8 extern int contour_topo_flag;
9 extern int add_topo_flag;
10 extern int add_isohyet_flag;
11 extern int add_max_flag;
12 extern int add_min_flag;
13 extern int change_map_flag;
14 extern int off[100];
15 extern int topo_number;
16 extern int isoh_number;
17 extern int min_number;
18 extern int max_number;
19 extern Widget drawing_area;
20 extern double max_lat,min_lat,cen_lon;
21 extern char station_list_file[100];
22 extern int isohyets_used;
23 extern int fgbgflag;
24 extern Widget top_level;
25 extern int posit;
26 extern Widget s_text;
27 extern unsigned car[100];
28 extern struct maplayer *smaplayer[100];
29 extern struct MenuItem ktems[100];
30 extern struct dval dval;
31 extern Widget scrollbar;
32 int i,j,ier,no,zoom,color,ii,lflag,xadd,yadd,type,k,len,jj;
33 char kbuf[120],*p,*q,*sname[50],nm[50],dbuf[100],fname[100];
34 char name[100],ebuf[120];
35 int num[100];
36 FILE *ft;
37 long xsize=12800,ysize=9600;
38 double f1,f2,xo,yo,a,conv=.0174,lat,lon;
39 struct maplayer *maplayer;
40 FILE *fp;
41 int slider_size,scrollm,ivalue,increment,page_increment;
42 Dimension width,height;
43 float x_lat,n_lat,x_lon,n_lon;
44 int XSIZE,YSIZE;
45 Arg args[10];
46 struct mappoints points[30000];
47 int numseg;
48 char kbuf1[50],kbuf2[50],pchar;
49 int center;
50 extern void clear_backgrounds();
51 extern void max_select();
52 extern void min_select();
53 int raster_flag;
54 
55 strcpy(kbuf1,"'");
56 
57 pchar=kbuf1[0];
58 
59 /* This will free memory if necessary */
60 
61 isohyets_used=0;
62 
63 for(j=0;j<100;j++)
64  num[j]=j;
65 
66 j=0;
67 jj=0;
68 
69 fp=fopen(sfname,"r");
70 
71 if(fp==NULL) {
72 
73  printf("%s does not exist\n",sfname);
74 
75  exit(1);
76 
77  }
78 
79 fgets(kbuf,110,fp);
80 
81 p=pars_line(kbuf,"maximum_latitude=",dbuf);
82 
83 if(p!=NULL)
84  max_lat=atof(dbuf);
85 
86 else {
87 
88  printf("maximum_latitude not specified\n");
89  exit(1);
90 
91  }
92 
93 p=pars_line(kbuf,"minimum_latitude=",dbuf);
94 if(p!=NULL)
95  min_lat=atof(dbuf);
96 
97 else {
98 
99  printf("minimum_latitude not specified\n");
100  exit(1);
101 
102  }
103 
104 p=pars_line(kbuf,"center_longitude=",dbuf);
105 if(p!=NULL)
106  cen_lon=atof(dbuf);
107 
108 
109 else {
110 
111  printf("center_longitude not specified\n");
112  exit(1);
113 
114  }
115 
116 f1=cos(max_lat*conv)/(1+sin(max_lat*conv));
117 f2=cos(min_lat*conv)/(1+sin(min_lat*conv));
118 
119 a=ysize/(f1-f2);
120 yo=a*f1;
121 xo=xsize/2;
122 
123 dval.a=a;
124 dval.yo=yo;
125 dval.xo=xo;
126 dval.lo=cen_lon;
127 lflag=0;
128 
129 XtSetArg(args[0],XtNwidth,&width);
130 XtSetArg(args[1],XtNheight,&height);
131 XtGetValues(drawing_area,args,2);
132 
133 XSIZE=width*10;
134 YSIZE=height*10;
135 
136 get_lat_lon(0,0,&x_lat,&x_lon);
137 get_lat_lon(12800,9600,&n_lat,&n_lon);
138 
139 x_lat=max_lat;
140 n_lat=min_lat;
141 
142 for(ii=0;ii<100;ii++) {
143 
144  p=fgets(kbuf,110,fp);
145  if(p==NULL)
146  break;
147 
148  ier=strlen(kbuf);
149  kbuf[ier-1]=0;
150 
151  nm[0]=0;
152  p=pars_line(kbuf,"name=",nm);
153 
154  center=0;
155  p=pars_line(kbuf,"justify=center",fname);
156  if(p!=NULL)
157  center=1;
158 
159  fname[0]=0;
160 
161  p=pars_linen(kbuf,"topography=",fname);
162  if(p!=NULL) {
163 
164 
165  p=pars_line(kbuf,"raster=on",dbuf);
166  if(p!=NULL)
167  raster_flag=1;
168 
169  else
170  raster_flag=-1;
171 
172 
173  topo_number=j;
174  sname[j]=calloc(1,strlen(nm)+1);
175  strcpy(sname[j],nm);
176  ktems[j].label=sname[j];
178 
179  strcat(nm,"\n");
180  posit=posit+strlen(nm);
181  XmTextInsert(s_text,posit,nm);
182 
183  XtVaGetValues(scrollbar,XmNmaximum,&scrollm,NULL);
184  XmScrollBarGetValues(scrollbar,&ivalue,&slider_size,
185  &increment,&page_increment);
186  XmScrollBarSetValues(scrollbar,scrollm-slider_size,
187  slider_size,increment,page_increment,True);
188 
189  XmUpdateDisplay(top_level);
190 
192 
193 
194  p=pars_line(kbuf,"default=on",dbuf);
195  if(p!=NULL) {
196 
197  add_topo_flag=1;
198  change_map_flag=1;
199  if(raster_flag==1)
201 
202  }
203 
204  ktems[j++].callback_data=NULL;
205  continue;
206 
207  }
208 
209  p=pars_linen(kbuf,"isohyets=",fname);
210  if(p!=NULL) {
211 
212 
213  isoh_number=j;
214  sname[j]=calloc(1,strlen(nm)+1);
215  strcpy(sname[j],nm);
216  ktems[j].label=sname[j];
218  ktems[j++].callback_data=NULL;
219  strcat(nm,"\n");
220  posit=posit+strlen(nm);
221  XmTextInsert(s_text,posit,nm);
222 
223  XtVaGetValues(scrollbar,XmNmaximum,&scrollm,NULL);
224 
225  XmScrollBarGetValues(scrollbar,&ivalue,&slider_size,
226  &increment,&page_increment);
227 
228 
229  XmScrollBarSetValues(scrollbar,scrollm-slider_size,
230  slider_size, increment,page_increment,True);
231  XmUpdateDisplay(top_level);
232 
233  get_isohyet_coord(fname,smonth,emonth);
234 
235  if(off[j]==1) {
236 
237  add_isohyet_flag=1;
238  change_map_flag=1;
239 
240 
241  }
242  continue;
243 
244  }
245  p=pars_linen(kbuf,"max=",fname);
246  if(p!=NULL) {
247 
248 
249  max_number=j;
250  sname[j]=calloc(1,strlen(nm)+1);
251  strcpy(sname[j],nm);
252  ktems[j].label=sname[j];
253  ktems[j].callback=max_select;
254  ktems[j++].callback_data=NULL;
255  strcat(nm,"\n");
256  posit=posit+strlen(nm);
257  XmTextInsert(s_text,posit,nm);
258 
259  XtVaGetValues(scrollbar,XmNmaximum,&scrollm,NULL);
260 
261  XmScrollBarGetValues(scrollbar,&ivalue,&slider_size,
262  &increment,&page_increment);
263 
264 
265  XmScrollBarSetValues(scrollbar,scrollm-slider_size,
266  slider_size, increment,page_increment,True);
267  XmUpdateDisplay(top_level);
268 
269  get_maxmin_coord(fname,smonth,emonth,0);
270 
271  if(off[j]==1) {
272 
273  add_max_flag=1;
274  change_map_flag=1;
275 
276 
277  }
278 
279  continue;
280 
281  }
282  p=pars_linen(kbuf,"min=",fname);
283  if(p!=NULL) {
284 
285  min_number=j;
286  sname[j]=calloc(1,strlen(nm)+1);
287  strcpy(sname[j],nm);
288  ktems[j].label=sname[j];
289  ktems[j].callback=min_select;
290  ktems[j++].callback_data=NULL;
291  strcat(nm,"\n");
292  posit=posit+strlen(nm);
293  XmTextInsert(s_text,posit,nm);
294 
295  XtVaGetValues(scrollbar,XmNmaximum,&scrollm,NULL);
296 
297  XmScrollBarGetValues(scrollbar,&ivalue,&slider_size,
298  &increment,&page_increment);
299 
300 
301  XmScrollBarSetValues(scrollbar,scrollm-slider_size,
302  slider_size, increment,page_increment,True);
303  XmUpdateDisplay(top_level);
304 
305  get_maxmin_coord(fname,smonth,emonth,1);
306 
307  if(off[j]==1) {
308 
309  add_min_flag=1;
310  change_map_flag=1;
311 
312 
313  }
314 
315  continue;
316 
317  }
318  type=-1;
319 
320  p=pars_linen(kbuf,"arc=",fname);
321  if(p!=NULL)
322  type=0;
323 
324  p=pars_linen(kbuf,"poly=",fname);
325  if(p!=NULL)
326  type=1;
327 
328  p=pars_linen(kbuf,"text=",fname);
329  if(p!=NULL)
330  type=2;
331 
332  if(type==-1)
333  continue;
334 
335  ft=fopen(fname,"r");
336 
337  if(ft==NULL) {
338 
339  printf("could not open %s\n",fname);
340  continue;
341 
342  }
343 
344  p=fgets(ebuf,100,ft);
345 
346  ier=sscanf(ebuf,"%s %s %s %s %s",dbuf,dbuf,dbuf,dbuf,dbuf);
347 
348  rewind(ft);
349 
350  car[j]=-1;
351 
352  color=8;
353  p=pars_line(kbuf,"color=",dbuf);
354  if(p!=NULL)
355  color=atoi(dbuf);
356 
357 
358  if(lflag==1){
359 
360  maplayer->nextseg=(struct maplayer *)calloc(1,sizeof(struct maplayer));
361  if(maplayer->nextseg==NULL)
362  printf("no memory\n");
363 
365 
366  }
367 
368  else {
369 
370  p=pars_line(kbuf,"default=on",fname);
371  if(p!=NULL)
372  off[jj]=1;
373 
374  else
375  off[jj]=-1;
376 
377  sname[j]=calloc(1,strlen(nm)+1);
378  strcpy(sname[j],nm);
379  ktems[j].label=sname[j];
381  ktems[j].callback_data=(XtPointer)num[jj];
382  j++;
383  maplayer=(struct maplayer *) calloc(1,sizeof(struct maplayer));
384  smaplayer[jj++]=maplayer;
385 
386  }
387 
388  if(lflag==0) {
389 
390  strcat(nm,"\n");
391  posit=posit+strlen(nm);
392  XmTextInsert(s_text,posit,nm);
393 
394  XtVaGetValues(scrollbar,XmNmaximum,&scrollm,NULL);
395  XmScrollBarGetValues(scrollbar,&ivalue,&slider_size,
396  &increment,&page_increment);
397  XmScrollBarSetValues(scrollbar,scrollm-slider_size,slider_size,
398  increment,page_increment,True);
399 
400  XmUpdateDisplay(top_level);
401 
402  }
403 
404 
405  lflag=0;
406  p=pars_line(kbuf,"link",dbuf);
407  if(p!=NULL)
408  lflag=1;
409 
410  p=fgets(kbuf,100,ft);
411 
412  if(p==NULL)
413  continue;
414 
415  for(;;) {
416 
417  if(type==0 || type==1) {
418 
419  maplayer->name=NULL;
420  maplayer->zoom=1;
422  maplayer->type=type;
423  numseg=0;
424 
425  for(;;) {
426 
427  p=fgets(kbuf,100,ft);
428  if(p==NULL) {
429 
430  maplayer->nextseg=NULL;
431  break;
432 
433  }
434 
435  if(strncmp("END",kbuf,3)==0)
436  break;
437 
438  sscanf(kbuf,"%lf %lf",&lon,&lat);
439  lon=-lon;
440 
441  if((lon < n_lon || lon > x_lon) &&
442  ( lat < n_lat || lat > x_lat))
443  continue;
444 
445  points[numseg].x=a * cos(lat*conv)/(1+sin(lat*conv))*
446  cos((lon-cen_lon-90)*conv) + xo;
447 
448  points[numseg].y=a * cos(lat*conv)/(1+sin(lat*conv))*
449  sin((lon-cen_lon-90)*conv) + yo;
450 
451  numseg++;
452 
453  }
454 
455  if(numseg < 2) {
456 
457  maplayer->nextseg=NULL;
458  p=fgets(kbuf,100,ft);
459  if(p==NULL)
460  goto resume;
461 
462  continue;
463 
464  }
465 
466  maplayer->number=numseg;
467  maplayer->points=(struct mappoints *)calloc(numseg,sizeof(struct mappoints));
468 
469  if(maplayer->points==NULL)
470  printf("no memory\n");
471 
472  memcpy(maplayer->points,&points,numseg*sizeof(struct mappoints));
473 
474  }
475 
476  else {
477 
478  /* text type */
479 
480  i=0;
481  while(kbuf[i] != 0) {
482 
483  if(kbuf[i]==',')
484  kbuf[i]=' ';
485 
486  i++;
487 
488  }
489 
490  ier=sscanf(kbuf,"%s %s",kbuf1,kbuf2);
491 
492  if(ier !=2) {
493 
494  printf("error in format %s\n",sname[j]);
495 
496  break;
497 
498  }
499 
500  p=strchr(kbuf,pchar);
501  if(p==NULL){
502 
503  printf("error in format %s\n",sname[j]);
504 
505  break;
506 
507  }
508 
509  q=strchr(p+1,pchar);
510  if(q==NULL){
511 
512  printf("error in format %s\n",sname[j]);
513 
514  break;
515 
516  }
517 
518  *q=0;
519  strcpy(name,p+1);
520 
521  xadd=1;
522  yadd=1;
523  zoom=1;
524 
525  ier=sscanf(q+1,"%d %d %d %d",&xadd,&yadd,&zoom);
526 
527  lon=-atof(kbuf1);
528  lat= atof(kbuf2);
529 
530  maplayer->zoom=zoom;
531  maplayer->xmax=xadd;
532  maplayer->ymax=yadd;
534  maplayer->type=type;
535  maplayer->number=center;
536 
537 
538  maplayer->points=(struct mappoints *)calloc(1,sizeof(struct mappoints));
539  maplayer->points[0].x=a * cos(lat*conv)/(1+sin(lat*conv))*
540  cos((lon-cen_lon-90)*conv) + xo;
541 
542  maplayer->points[0].y=a * cos(lat*conv)/(1+sin(lat*conv))*
543  sin((lon-cen_lon-90)*conv) + yo;
544 
545  len=strlen(name);
546 
547  maplayer->name=(char *) calloc(len + 1,sizeof(char));
548  strcpy(maplayer->name,name);
549 
550  }
551 
552  p=fgets(kbuf,100,ft);
553  if(p==NULL) {
554 
555  maplayer->nextseg=NULL;
556  break;
557 
558  }
559 
560  maplayer->nextseg=(struct maplayer *)calloc(1,sizeof(struct maplayer));
561  if(maplayer->nextseg==NULL)
562  printf("no memory\n");
563 
565 
566  }
567 
568  resume:
569 
570  fclose(ft);
571 
572  }
573 
574 off[jj++]=-1;
575 ktems[j].label="Clear backgrounds";
577 ktems[j++].callback_data=(XtPointer)0;
578 
579 off[jj]=1;
580 fgbg_number=j;
581 ktems[j].label="Maps Foreground";
583 ktems[j++].callback_data=(XtPointer)fgbgflag;
584 ktems[j].label=NULL;
585 
586 fclose(fp);
587 
588 
589 return;
590 
591 }
592 
593 
char name[35][30]
Definition: borshef.c:10
static int i
Widget top_level
Definition: display_rec.c:5
double f1[]
Definition: ffg.c:35
void get_isohyet_coord(char *fname, int smonth, int emonth)
void get_lat_lon(int newx, int newy, float *lat, float *lon)
Definition: get_lat_lon.c:3
void get_maxmin_coord(char *fname, int smonth, int emonth, int type)
void get_topo_coord(char *fname)
Definition: get_topo_coord.c:3
char * pars_line(char *buf, char *s, char *sbuf)
Definition: pars_line.c:3
void isohyet_select(void)
void topo_select(void)
Definition: mapper.c:4005
void foreground_select(void)
Definition: mapper.c:3972
void map_select(Widget, XtPointer, XmDrawingAreaCallbackStruct *)
Definition: mapper.c:4020
fclose(fp)
printf("fbuf is %s\n", fbuf)
fp
Definition: make_NEXRAD.c:339
int j
Definition: mapp2h.h:48
double lat
Definition: mapp2h.h:41
double lon
Definition: mapp2h.h:41
int k
Definition: mapp2h.h:48
int raster_flag
Definition: mapper.c:72
double cen_lon
Definition: mapper.c:22
int add_topo_flag
Definition: mapper.c:96
double min_lat
Definition: mapper.c:22
int off[100]
Definition: mapper.c:105
char station_list_file[256]
Definition: mapper.c:18
Widget scrollbar
Definition: mapper.c:185
void clear_backgrounds()
Definition: mapper.c:3978
int posit
Definition: mapper.c:93
struct MenuItem ktems[100]
Definition: mapper.c:136
int fgbgflag
Definition: mapper.c:79
Widget s_text
Definition: mapper.c:185
int change_map_flag
Definition: mapper.c:86
int contour_topo_flag
Definition: mapper.c:88
int topo_number
Definition: mapper.c:37
struct maplayer * smaplayer[100]
Definition: mapper.c:145
unsigned car[100]
Definition: mapper.c:111
double max_lat
Definition: mapper.c:22
int fgbg_number
Definition: mapper.c:34
char * pars_linen(char *, char *, char *)
Definition: pars_linen.c:3
void read_maps(char *sfname, int smonth, int emonth)
int color
Dimension height
Dimension width
Arg args[10]
unsigned long XSIZE
int zoom
Widget drawing_area
Definition: mapper.c:185
unsigned long YSIZE
char fname[100]
Definition: send_afos.c:6
Definition: misc.h:459
char * label
Definition: misc.h:461
void(* callback)()
Definition: misc.h:463
XtPointer callback_data
Definition: misc.h:464
Definition: misc.h:470
double lo
Definition: misc.h:475
double a
Definition: misc.h:472
double yo
Definition: misc.h:474
double xo
Definition: misc.h:473
Definition: misc.h:443
short int xmax
Definition: misc.h:448
short int number
Definition: misc.h:447
int type
Definition: misc.h:452
char * name
Definition: misc.h:453
struct maplayer * nextseg
Definition: misc.h:455
short int color
Definition: misc.h:445
short int zoom
Definition: misc.h:446
short int ymax
Definition: misc.h:449
struct mappoints * points
Definition: misc.h:454
int x
Definition: misc.h:438
int y
Definition: misc.h:439