]> Pileus Git - ~andy/rsl/blobdiff - src/radar_to_uf.c
Open files in binary mode for Win32
[~andy/rsl] / src / radar_to_uf.c
index 5b7e499b891421dc628cf535631b35151a4def81..de1f96dd4d8c800d45541366feb0a7ee7bd660a1 100644 (file)
@@ -25,7 +25,6 @@
 #include <time.h>
 #include <stdlib.h>
 
-#define USE_RSL_VARS
 #include "rsl.h"
 extern int radar_verbose_flag;
 /* Missing data flag : -32768 when a signed short. */
@@ -58,7 +57,8 @@ extern int radar_verbose_flag;
  */
 
 
-typedef short UF_buffer[16384]; /* Bigger than documented 4096. */
+/* Changed old buffer size (16384) for larger dualpol files.  BLK 5/20/2011 */
+typedef short UF_buffer[20000]; /* Bigger than documented 4096. */
 
 void swap_uf_buffer(UF_buffer uf);
 void swap2(short *buf, int n);
@@ -185,7 +185,7 @@ void RSL_radar_to_uf_fp(Radar *r, FILE *fp)
     fprintf(stderr,"Maximum #   of volumes for UF is %d\n", nvolumes);
   }
 
-  max_field_names = sizeof(RSL_ftype) / 4;
+  max_field_names = MAX_RADAR_VOLUMES;
 
 /*--------
  *   LOOP for all sweeps (typically 11 or 16 for wsr88d data.
@@ -210,9 +210,10 @@ void RSL_radar_to_uf_fp(Radar *r, FILE *fp)
     ray_num = 0;
   if (radar_verbose_flag) 
     fprintf(stderr,"Processing sweep %d for %d rays.", i, nrays);
-  if (radar_verbose_flag)
+  if (radar_verbose_flag) {
     if (little_endian()) fprintf(stderr," ... On Little endian.\n");
     else fprintf(stderr,"\n");
+  }
 
 
 /* Now LOOP for all rays within this particular sweep (i).
@@ -308,7 +309,7 @@ void RSL_radar_to_uf_fp(Radar *r, FILE *fp)
         if (ray->h.azimuth > 0) uf_ma[32] = ray->h.azimuth*64 + 0.5;
         else uf_ma[32] = ray->h.azimuth*64 - 0.5;
         uf_ma[33] = ray->h.elev*64 + 0.5;
-       uf_ma[34] = uf_sweep_mode;
+        uf_ma[34] = uf_sweep_mode;
         if (ray->h.fix_angle != 0.)
              uf_ma[35] = ray->h.fix_angle*64.0 + 0.5;
         else uf_ma[35] = sweep[k]->h.elev*64.0 + 0.5;
@@ -351,18 +352,16 @@ void RSL_radar_to_uf_fp(Radar *r, FILE *fp)
         /* ---- Begining of LOCAL USE HEADER BLOCK. */
         q_lu = 0;
 
-       /* Note: Code within "#ifdef LUHDR_VR_AZ" below is retained for testing
-        * and is not normally compiled.  It was used to deal with azimuth
-        * differences between DZ and VR in WSR-88D split-cuts, now handled in
-        * ingest routine.
-        */
+        /* TODO: Code within "#ifdef LUHDR_VR_AZ" below should be removed
+         * once testing of merge_split_cuts is completed.
+         */
 /* 5/18/2010 Temporarily define LUHDR_VR_AZ until merge_split_cuts is
    completed. */
 #define LUHDR_VR_AZ
 #ifdef LUHDR_VR_AZ
         /* If DZ and VR azimuths are different, store VR azimuth in Local Use
          * Header. This is done for WSR-88D split cuts.
-        */
+         */
         if (sweep[DZ_INDEX] && sweep[VR_INDEX]) {
             if (sweep[DZ_INDEX]->ray[j] && sweep[VR_INDEX]->ray[j]) {
             vr_az = sweep[VR_INDEX]->ray[j]->h.azimuth;
@@ -413,15 +412,15 @@ void RSL_radar_to_uf_fp(Radar *r, FILE *fp)
               uf_dh[2] = nfield;
               /* 'nfield' indexes the field number.
                * 'k' indexes the particular field from the volume.
-              *  RSL_ftype contains field names and is defined in rsl.h.
+               *  RSL_ftype contains field names and is defined in rsl.h.
                */
               if (k > max_field_names-1) {
-               fprintf(stderr,
+                fprintf(stderr,
                   "RSL_uf_to_radar: No field name for volume index %d\n", k);
-               fprintf(stderr,"RSL_ftype must be updated in rsl.h for new field.\n");
-               fprintf(stderr,"Quitting now.\n");
+                fprintf(stderr,"RSL_ftype must be updated in rsl.h for new field.\n");
+                fprintf(stderr,"Quitting now.\n");
                 return;
-             }
+              }
               memcpy(&uf_dh[3+2*(nfield-1)], RSL_ftype[k], 2);
               if (little_endian()) swap2(&uf_dh[3+2*(nfield-1)], 2/2);
               if (current_fh_index == 0) current_fh_index = len_ma+len_op+len_lu+len_dh;
@@ -432,7 +431,9 @@ void RSL_radar_to_uf_fp(Radar *r, FILE *fp)
             /* ---- Begining of FIELD HEADER. */
             if (q_fh) {
               uf_fh = uf+current_fh_index;
-              uf_fh[1] = scale_factor = 100;
+             if (k != PH_INDEX) scale_factor = 100;
+             else scale_factor = 10;
+              uf_fh[1] = scale_factor;
               uf_fh[2] = ray->h.range_bin1/1000.0;
               uf_fh[3] = ray->h.range_bin1 - (1000*uf_fh[2]);
               uf_fh[4] = ray->h.gate_size;
@@ -526,7 +527,7 @@ void RSL_radar_to_uf(Radar *r, char *outfile)
     return;
   }
 
-  if ((fp = fopen(outfile, "w")) == NULL) {
+  if ((fp = fopen(outfile, "wb")) == NULL) {
     perror(outfile);
     return;
   }
@@ -548,7 +549,7 @@ void RSL_radar_to_uf_gzip(Radar *r, char *outfile)
     return;
   }
 
-  if ((fp = fopen(outfile, "w")) == NULL) {
+  if ((fp = fopen(outfile, "wb")) == NULL) {
     perror(outfile);
     return;
   }