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