]> Pileus Git - ~andy/rsl/commitdiff
Support 2 byte data
authorAndy Spencer <andy753421@gmail.com>
Thu, 3 Feb 2011 06:25:37 +0000 (06:25 +0000)
committerAndy Spencer <andy753421@gmail.com>
Thu, 3 Feb 2011 06:25:37 +0000 (06:25 +0000)
wsr88d_m31.c

index 8b4b243be387a4331e5bcc5818f0e3ea4f2fadb7..5902cd4c46b0e09d255ac15695d4c9135d28717a 100644 (file)
@@ -393,7 +393,7 @@ void wsr88d_load_ray(Wsr88d_ray_m31 wsr88d_ray, int data_ptr,
     int ngates;
     int i, hdr_size;
     float value, scale, offset;
-    unsigned char *data;
+    void *data;
     Range (*invf)(float x);
     float (*f)(Range x);
     Ray *ray;
@@ -459,9 +459,18 @@ void wsr88d_load_ray(Wsr88d_ray_m31 wsr88d_ray, int data_ptr,
        if (data_hdr.scale == 0) scale = 1.0; 
        data = &wsr88d_ray.data[data_ptr];
        for (i = 0; i < ngates; i++) {
-           if (data[i] > 1)
-               value = (data[i] - offset) / scale;
-           else value = (data[i] == 0) ? BADVAL : RFVAL;
+           unsigned short datan = 0;
+           switch (data_hdr.datasize_bits) {
+               case 8:  datan = ((unsigned char  *)data)[i]; break;
+               case 16: datan = ((unsigned short *)data)[i]; break;
+           }
+           if (little_endian() && data_hdr.datasize_bits == 16)
+               swap_2_bytes(&datan);
+
+           if (datan > 1)
+               value = (datan - offset) / scale;
+           else value = (datan == 0) ? BADVAL : RFVAL;
+
            ray->range[i] = invf(value);
            ray->h.f = f;
            ray->h.invf = invf;