/* Byte swap functions used by p3dcod.c */ /* The machine which generates the P3 radar products is little-endian, so we need to byte-swap all integers and reals if we want to decode them on a big-endian machine. */ int reverse_int4(int n) { #ifdef BIG_ENDIAN int i; int ibuf; signed char *p, *q; p=(signed char *)&ibuf; q=(signed char *)&n; q+=3; for(i=0;i<4;i++) *p++=*q--; return(ibuf); #else return n; #endif } short reverse_int2(short n) { #ifdef BIG_ENDIAN int i; short ibuf; signed char *p, *q; p=(signed char *)&ibuf; q=(signed char *)&n; q+=1; for(i=0;i<2;i++) *p++=*q--; return(ibuf); #else return n; #endif } void swp_int2(int k, short *n) { int i; for( i = 0; i < k; i++ ) n[i] = reverse_int2(n[i]); return; } float reverse_float(float n) { #ifdef BIG_ENDIAN int i; float ibuf; signed char *p, *q; p=(signed char *)&ibuf; q=(signed char *)&n; q+=3; for(i=0;i<4;i++) *p++=*q--; return(ibuf); #else return n; #endif } void swp_float(int k, float *n) { int i; for( i = 0; i < k; i++ ) n[i] = reverse_float(n[i]); return; } double reverse_double(double n) { #ifdef BIG_ENDIAN int i; double ibuf; signed char *p, *q; p=(signed char *)&ibuf; q=(signed char *)&n; q+=7; for(i=0;i<8;i++) *p++=*q--; return(ibuf); #else return n; #endif }