diff -w -ru rsl-v1.40/wsr88d_m31.c rsl-v1.40.test/wsr88d_m31.c --- rsl-v1.40/wsr88d_m31.c 2008-10-08 23:43:03.000000000 +0000 +++ rsl-v1.40.test/wsr88d_m31.c 2009-05-14 10:06:23.000000000 +0000 @@ -515,6 +515,7 @@ m1_ray.vol_cpat = vcp_data.vcp; m1_ray.elev_num = ray_hdr.elev_num; m1_ray.unam_rng = wsr88d_ray.unamb_rng; + m1_ray.nyq_vel = wsr88d_ray.nyq_vel; // TODO: is this correct? if (ray_hdr.azm_res != 1) ray->h.beam_width = 1.0; else ray->h.beam_width = 0.5; @@ -603,6 +604,8 @@ radar->v[vol_index]->sweep[isweep]->ray[iray] = ray; radar->v[vol_index]->sweep[isweep]->h.nrays = iray+1; } + free(wsr88d_ray.ref->data); + free(wsr88d_ray.ref); } if (wsr88d_ray.ray_hdr.dbptr_vel > 0) { @@ -628,6 +631,8 @@ wsr88d_load_ray_hdr(wsr88d_ray, ray); radar->v[vol_index]->sweep[isweep]->ray[iray] = ray; radar->v[vol_index]->sweep[isweep]->h.nrays = iray+1; + free(wsr88d_ray.vel->data); + free(wsr88d_ray.vel); } if (wsr88d_ray.ray_hdr.dbptr_sw > 0) { @@ -653,6 +658,8 @@ wsr88d_load_ray_hdr(wsr88d_ray, ray); radar->v[vol_index]->sweep[isweep]->ray[iray] = ray; radar->v[vol_index]->sweep[isweep]->h.nrays = iray+1; + free(wsr88d_ray.sw->data); + free(wsr88d_ray.sw); } } @@ -706,15 +713,27 @@ * at the WSR-88D Radar Operations Center web site. */ - n = fread(&msghdr, sizeof(Wsr88d_msg_hdr), 1, wf->fptr); - - /* printf("msgtype = %d\n", msghdr.msg_type); */ - msg_hdr_size = sizeof(Wsr88d_msg_hdr) - sizeof(msghdr.rpg); radar = RSL_new_radar(MAX_RADAR_VOLUMES); while (! end_of_vos) { + /* Read current header */ + n = fread(&msghdr, sizeof(Wsr88d_msg_hdr), 1, wf->fptr); + if (n < 1) { + fprintf(stderr,"Warning: load_wsr88d_m31_into_radar: "); + if (feof(wf->fptr) != 0) fprintf(stderr, + "Unexpected end of file.\n"); + else fprintf(stderr,"Failed reading msghdr.\n"); + fprintf(stderr,"Current sweep number: %d\n" + "Last ray read: %d\n", isweep+1, iray); + wsr88d_load_sweep_header(radar, isweep, wsr88d_ray); + return radar; + } + + /* printf("msgtype = %d\n", msghdr.msg_type); */ + msg_hdr_size = sizeof(Wsr88d_msg_hdr) - sizeof(msghdr.rpg); + if (msghdr.msg_type == 31) { if (little_endian()) wsr88d_swap_m31_hdr(&msghdr); @@ -729,6 +748,18 @@ /* Load this ray into radar structure ray. */ wsr88d_load_ray_into_radar(wsr88d_ray, isweep, iray, radar); iray++; + + /* Check for end of sweep */ + if (wsr88d_ray.ray_hdr.radial_status == END_OF_ELEV) { + wsr88d_load_sweep_header(radar, isweep, wsr88d_ray); + isweep++; + iray = 0; + } + + if (wsr88d_ray.ray_hdr.radial_status == END_VOS) { + //wsr88d_load_sweep_header(radar, isweep, wsr88d_ray); + end_of_vos = 1; + } } else { /* msg_type not 31 */ n = fread(&non31_seg_remainder, sizeof(non31_seg_remainder), 1, @@ -748,33 +779,11 @@ radar->h.vcp = vcp_data.vcp; /* printf("VCP = %d\n", vcp_data.vcp); */ } + /* TODO: check for end of sweep/volume */ } - /* Check for end of sweep */ - if (wsr88d_ray.ray_hdr.radial_status == END_OF_ELEV) { - wsr88d_load_sweep_header(radar, isweep, wsr88d_ray); - isweep++; - iray = 0; - } - - if (wsr88d_ray.ray_hdr.radial_status != END_VOS) { - n = fread(&msghdr, sizeof(Wsr88d_msg_hdr), 1, wf->fptr); - if (n < 1) { - fprintf(stderr,"Warning: load_wsr88d_m31_into_radar: "); - if (feof(wf->fptr) != 0) fprintf(stderr, - "Unexpected end of file.\n"); - else fprintf(stderr,"Failed reading msghdr.\n"); - fprintf(stderr,"Current sweep number: %d\n" - "Last ray read: %d\n", isweep+1, iray); - wsr88d_load_sweep_header(radar, isweep, wsr88d_ray); - return radar; - } - } - else { + if (feof(wf->fptr) != 0) end_of_vos = 1; - wsr88d_load_sweep_header(radar, isweep, wsr88d_ray); - } - if (feof(wf->fptr) != 0) end_of_vos = 1; } return radar; diff -w -ru rsl-v1.40/wsr88d_to_radar.c rsl-v1.40.test/wsr88d_to_radar.c --- rsl-v1.40/wsr88d_to_radar.c 2008-07-30 22:41:20.000000000 +0000 +++ rsl-v1.40.test/wsr88d_to_radar.c 2009-05-14 10:07:09.000000000 +0000 @@ -429,5 +429,6 @@ radar->h.lpulse = sitep->lpulse; radar = RSL_prune_radar(radar); + free(sitep); return radar; }