#include        <stdio.h>
#include        <string.h>
#include        <time.h>
#include        <math.h>

#include        "..\include\globals.h"

char    static *parms[] = {
		      "radar_name","polarization","test_pulse_power",
		      "test_pulse_frequency","frequency","transmit_power",
		      "noise_power","noise_figure","receiver_gain",
		      "piraq_saturation_power","antenna_gain",
		      "horizontal_beamwidth","vertical_beamwidth",
		      "xmit_pulsewidth","debug","text","phase_offset",""};

/* if fname is NULL string, default file will be loaded. */
/* all characters following text keyword are read-in as ascii */
void readradar(char *fname, RADAR *radar)
   {
   int  linenum,debug,text,i,c,err=0;
   char filename[180],keyword[180],value[180],line[180],name[180];
   time_t       tod;
   struct       tm      *tmbuf;
   double       logstuff;
   FILE *fp;

   /* initialize all parameters in the radar structure */
   *radar->radar_name = 0;
   *radar->text = 0;
   radar->polarization = radar->test_pulse_pwr = radar->test_pulse_frq 
	= radar->frequency = radar->peak_power = radar->noise_figure 
	= radar->noise_power = radar->receiver_gain = radar->data_sys_sat 
	= radar->antenna_gain = radar->horz_beam_width = radar->phaseoffset
	= radar->xmit_pulsewidth = radar->vert_beam_width = 0.0;

   if(strcmp(fname,""))        
      {
      for(i=0; fname[i] && fname[i] != '.'; i++)  filename[i] = fname[i];
      strcpy(&filename[i],".rdr");
      fp = fopen(filename,"r");
      if(!fp)
	 {
	 strcpy(filename,"config.rdr");
	 fp = fopen(filename,"r");
	 }
      }
   else 
      {
      strcpy(filename,"config.rdr");
      fp = fopen(filename,"r");
      }
   
   if(!fp) {printf("cannot open configuration file %s\n",filename); exit(0);}

   text = linenum = 0;
   while(!text && fgets(line,170,fp) != NULL)  /* while not end of file */
    {
    linenum++;
    getkeyval(line,keyword,value);  /* get the keyword and the value */
    if(strlen(keyword) != 0 && keyword[0] != ';')       /* if line is not a comment line or blank */  
      {
      switch(parse(keyword,parms))
	 {
	 case 0:        /* radar_name */
			strncpy(radar->radar_name,value,8);
			break;
	 case 1:        /* polarization */
			set(value,"%s",&radar->polarization,keyword,linenum,filename);
			break;
	 case 2:        /* test_pulse_pwr */
			set(value,"%f",&radar->test_pulse_pwr,keyword,linenum,filename);
			break;
	 case 3:        /* test_pulse_frq */
			set(value,"%f",&radar->test_pulse_frq,keyword,linenum,filename);
			break;
	 case 4:        /* frequency */
			set(value,"%f",&radar->frequency,keyword,linenum,filename);
			break;
	 case 5:        /* peak_power */
			set(value,"%f",&radar->peak_power,keyword,linenum,filename);
			break;
	 case 6:        /* noise_figure */
			set(value,"%f",&radar->noise_figure,keyword,linenum,filename);
			break;
	 case 7:        /* noise_power */
			set(value,"%f",&radar->noise_power,keyword,linenum,filename);
			break;
	 case 8:        /* receiver_gain */
			set(value,"%f",&radar->receiver_gain,keyword,linenum,filename);
			break;
	 case 9:        /* data_sys_sat */
			set(value,"%f",&radar->data_sys_sat,keyword,linenum,filename);
			break;
	 case 10:       /* antenna_gain */
			set(value,"%f",&radar->antenna_gain,keyword,linenum,filename);
			break;
	 case 11:        /* horizontal beamwidth */
			set(value,"%f",&radar->horz_beam_width,keyword,linenum,filename);
			break;
	 case 12:        /* vertical beamwidth */
			set(value,"%f",&radar->vert_beam_width,keyword,linenum,filename);
			break;
	 case 13:        /* transmitted pulsewidth */
			set(value,"%f",&radar->xmit_pulsewidth,keyword,linenum,filename);
			break;
	 case 14:        /* debug */
			set(value,"%q",&debug,keyword,linenum,filename);
			break;
	 case 15:        /* text */
			set(value,"%q",&text,keyword,linenum,filename);
			break;
	 case 16:        /* differential phase offset */
			set(value,"%f",&radar->phaseoffset,keyword,linenum,filename);
			radar->phaseoffset *= M_PI / 180.0;
			while(radar->phaseoffset >= M_PI) radar->phaseoffset -= 2 * M_PI;
			while(radar->phaseoffset <  -M_PI) radar->phaseoffset += 2 * M_PI;
			break;
	 default:
		printf("unrecognized keyword \"%s\" in line %d of %s\n",keyword,linenum,filename);
		err++;
		break;
	 }
      }
     }
   
   if(text)     /* if there is text in the file */
      for(i=0; i<999 && (EOF != (c = fgetc(fp))); i++)   radar->text[i] = c;
   radar->text[i] = 0;   
   
   fclose(fp);

   radar->desc[0] = 'R';
   radar->desc[1] = 'H';
   radar->desc[2] = 'D';
   radar->desc[3] = 'R';

   radar->recordlen = sizeof(RADAR);   

   radar->rev = 1;  /* rev is 1: text starts after byte 40 */

   tod = time(NULL);
   tmbuf = gmtime(&tod);
   radar->year = 1900 + tmbuf->tm_year;

   logstuff = radar->peak_power * 1000.0                /* transmit power (mW) */
	    * radar->horz_beam_width * M_PI / 180.0     /* beamwidth (rads) */
	    * radar->vert_beam_width * M_PI / 180.0     /* beamwidth (rads) */
	    * radar->xmit_pulsewidth                    /* transmitted pulsewidth (Sec) */
	    * M_PI * M_PI * M_PI                        /* dimensionless factor */
	    * K2                                        /* water phase  */
	    * radar->frequency * radar->frequency       /* frequency (Hz^2) */
	    / (C * 512.0 * 2 * log(2.0) * 1000.0 * 1000.0);  /* denom */

   radar->rconst = -10.0 * log10(logstuff)      /* from above */
		 - 2.0 * radar->antenna_gain   /* antenna gain */
		 + 2.3                          /* filter missmatch loss */
		 + 180.0;                      /* scale for mm6/m3 */
   
   if(debug)
      {
      printf("\nDEBUG: %s\n",filename);
      strncpy(line,radar->radar_name,8);  line[8] = 0;
      printf("%-28s %s\n",parms[0],line);
      printf("%-28s %c\n",parms[1],radar->polarization);
      printf("%-28s %f\n",parms[2],radar->test_pulse_pwr);
      printf("%-28s %f\n",parms[3],radar->test_pulse_frq);
      printf("%-28s %f\n",parms[4],radar->frequency);
      printf("%-28s %f\n",parms[5],radar->peak_power);
      printf("%-28s %f\n",parms[6],radar->noise_figure);
      printf("%-28s %f\n",parms[7],radar->noise_power);
      printf("%-28s %f\n",parms[8],radar->receiver_gain);
      printf("%-28s %f\n",parms[9],radar->data_sys_sat);
      printf("%-28s %f\n",parms[10],radar->antenna_gain);
      printf("%-28s %f\n",parms[11],radar->horz_beam_width);
      printf("%-28s %f\n",parms[12],radar->vert_beam_width);
      printf("%-28s %f\n",parms[13],radar->xmit_pulsewidth);
      printf("%-28s %f\n","radar constant",radar->rconst);
      printf("%-28s %d\n","year",radar->year);
      printf("%-28s %f\n",parms[16],radar->phaseoffset * 180.0 / M_PI);
      printf("text:\n%s\n",radar->text);
      exit(0);
      }

   if(err)      exit(-1);
   }    
   

