/*
*
* radarinfo.c
*
* This is a subsection of the WSR-88D archive-II I/O library
* codes, a2io.c, written by Kevin Thomas of NSSL, and
* shamelessly stolen and adapted by Keith Brewster, CAPS.
* It reads the a2io radar information file, radarinfo.dat
*
* Keith Brewster, May, 1996
*
*/
#include <stdio.h>
#include <strings.h>
#define MISSING -999
int radar_name_set =0;
char radar_name[4];
char site_name[8];
int lat;
int lon;
int alt;
int lat1,lat2,lat3;
int lon1,lon2,lon3;
/*
* The altitude info (station elevation) may now be in the data file.
*/
int get_altitude()
{
return( alt );
}
int get_latitude()
{
return( lat );
}
int get_longitude()
{
return( lon );
}
void get_radar_name(s)
char *s;
{
strncpy(s,radar_name,4);
return;
}
void get_site_name(s)
char *s;
{
strncpy(s,site_name,8);
return;
}
void set_radar_name(s)
char *s;
{
strncpy(radar_name,s,4);
radar_name_set++;
}
/*
* Radar name, site name, latitude, and longitude are all important
* radar parameters. Unfortunately, none of them are in the actual
* data themselves.
*
* The user may set the radar name by:
* o set_radar_name( some_name ); [in code]
* o setenv RADARNAME some_name [ignored if set_radar_name() used]
*
* The program retrieves the info from the file:
* o setenv RADARFILE some_file [data file]
* o from "./radarinfo.dat" [if RADARFILE not used]
*/
#define SIZE 120
FILE *fp;
void get_radar_info()
{
int rc;
char line[SIZE];
char *default_name = "radarinfo.dat";
char name[4], site[8];
char *ptr;
/*
* Initialize info to missing. Do NOT initialize "radar_name" here as
* the user may have already called set_radar_name().
*/
strncpy( site_name, "Unknown ", 8 );
lat = 0;
lon = 0;
alt = MISSING;
/*
* Retrieve the radar name.
*
* First, look and see if "set_radar_name()" has been called. If it
* hasn't, we look for an environmental variable.
*/
if ( radar_name_set == 0 )
{
ptr = (char *)getenv("RADARNAME");
if (ptr == NULL)
{
printf("WARNING: no call to set_radar_name, and no environmental variable RADARNAME\n");
printf("WARNING: radar name set to 'UNKN'\n");
strncpy(radar_name,"UNKN",4);
goto finish;
}
else
strncpy(radar_name,ptr,4);
}
/*
* Open the radar info file.
*
* Look for an environment variable.
*
* If the environmental variable isn't set, look for the radar file in
* the current directory. If it is set, and the file doesn't exist,
* complain and still look for the file in the current directory.
*/
ptr = (char *)getenv("RADARFILE");
if ( ptr != NULL )
{
fp = fopen(ptr,"r");
if (fp == NULL)
perror(ptr);
}
if (fp == NULL)
{
fp = fopen(default_name,"r");
if (fp == NULL)
{
printf("WARNING: can't find a valid '%s' file\n",
default_name);
goto finish;
}
}
fgets(line,SIZE,fp); /* eat header line */
while( fgets(line,SIZE,fp) != NULL )
{
rc = sscanf(line,"%4s %8c %d %d %d %d %d %d %d",
name,site,&lat1,&lat2,&lat3,&lon1,&lon2,&lon3,&alt);
if ( rc < 8 || rc > 9 )
{
printf("get_radar_info: %d arguments returned. ",rc);
printf("Radarinfo file is corrupt. Exit.\n");
exit( 1 );
}
if ( rc == 8 )
alt = MISSING;
#ifdef DEBUG_RADARINFO
printf("name %4s site %8.8s lat1 %d lat2 %d lat3 %d ",
name, site, lat1, lat2, lat3 );
printf("lon1 %d lon2 %d lon3 %d alt %d\n",
lon1, lon2, lon3, alt );
#endif
if (strncmp( radar_name, name, 4 ) == 0)
{
strncpy(site_name, site, 8);
break;
}
}
fclose(fp);
lat = dms_df( lat1, lat2, lat3 );
lon = dms_df( lon1, lon2, lon3 );
if ( lat == 0 )
printf("WARNING: radar '%s' not found in data file\n",
radar_name);
finish: ;
if ( lat == 0 )
printf("WARNING: latitude and longitude set to 0\n");
#ifdef DEBUG_A2IO
printf("\nRadar: %-4.4s\nSite: %-8.8s\nLat.: %f\nLong.: %f\n\n",
radar_name, site_name, lat/100000., lon/100000.);
#endif /* DEBUG_A2IO */
return;
}
/*
* Convert degrees, minutes, seconds to an integer (floating point
* value times 100000).
*/
int dms_df(a,b,c)
int a,b,c;
{
float tmp;
int ans;
tmp = ( (float) a + (float) b / 60.0 + (float) c / 3600.0 );
ans = (int) ( tmp * 100000 );
return( ans );
}