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