int mr1_xdrpnghdrv1(Ping *png, XDR *xdrs) /* Internal routine. Does XDR decoding of an MR1 version 1 ping header. Returns 1 if successful, 0 otherwise. */ { int mr1_xdrsidev1(PingSide *, XDR *); /* output in obsolete version 1 format not allowed! */ if (xdrs->x_op == XDR_ENCODE) return 0; if (!nan_init) { nan_f= mr1_nanf(); nan_d= mr1_nand(); nan_init= 1; } if (!xdr_long(xdrs, (MR1PR_LONG *) &(png->png_tm.tv_sec))) return 0; if (!xdr_long(xdrs, (MR1PR_LONG *) &(png->png_tm.tv_usec))) return 0; png->png_period= nan_f; png->png_slon= nan_d; png->png_slat= nan_d; png->png_scourse= nan_f; png->png_laybackrng= nan_f; png->png_laybackbrg= nan_f; if (!xdr_double(xdrs, &(png->png_tlon))) return 0; if (!xdr_double(xdrs, &(png->png_tlat))) return 0; if (!xdr_float(xdrs, &(png->png_tcourse))) return 0; png->png_compass.sns_int= nan_f; png->png_compass.sns_nsamps= 0; if (!xdr_float(xdrs, &(png->png_compass.sns_repval))) return 0; png->png_depth.sns_int= nan_f; png->png_depth.sns_nsamps= 0; if (!xdr_float(xdrs, &(png->png_depth.sns_repval))) return 0; if (!xdr_float(xdrs, &(png->png_alt))) return 0; png->png_pitch.sns_int= nan_f; png->png_pitch.sns_nsamps= 0; if (!xdr_float(xdrs, &(png->png_pitch.sns_repval))) return 0; png->png_roll.sns_int= nan_f; png->png_roll.sns_nsamps= 0; if (!xdr_float(xdrs, &(png->png_roll.sns_repval))) return 0; png->png_snspad= 0; if (!xdr_float(xdrs, &(png->png_temp))) return 0; if (!xdr_float(xdrs, &(png->png_atssincr))) return 0; png->png_magcorr= nan_f; png->png_sndvel= nan_f; if (!mr1_xdrsidev1(&(png->png_sides[ACP_PORT]), xdrs)) return 0; png->png_sides[ACP_PORT].ps_bdrange= png->png_alt; if (!mr1_xdrsidev1(&(png->png_sides[ACP_STBD]), xdrs)) return 0; png->png_sides[ACP_STBD].ps_bdrange= png->png_alt; return 1; }
int mbbs_mr1_xdrpnghdrv1(Ping *png, XDR *xdrs) /* Internal routine. Does XDR decoding of an MR1 version 1 ping header. Returns 1 if successful, 0 otherwise. */ { int tvsec, tvusec; unsigned long sidebc; int mr1_xdrsidev1(PingSide *, XDR *, unsigned long *); bs_iobytecnt= 0; /* output in obsolete format not allowed! */ if (xdrs->x_op == XDR_ENCODE) return 0; if (!bs_ionaninit) { bs_ionanf= mbbs_nanf(); bs_ionand= mbbs_nand(); bs_ionaninit= 1; } png->png_flags= PNG_BTYSSFLAGSABSENT; /* depending upon the platform, the size of the timeval struct's fields may be 4 or 8 bytes; for backward compatibility with old files that use 4-byte fields, we use 4-byte primitives */ if (!xdr_int(xdrs, &tvsec)) return 0; bs_iobytecnt+= 4; png->png_tm.tv_sec= tvsec; if (!xdr_int(xdrs, &tvusec)) return 0; bs_iobytecnt+= 4; png->png_tm.tv_usec= tvusec; png->png_period= bs_ionanf; png->png_slon= bs_ionand; png->png_slat= bs_ionand; png->png_scourse= bs_ionanf; png->png_laybackrng= bs_ionanf; png->png_laybackbrg= bs_ionanf; if (!xdr_double(xdrs, &(png->png_tlon))) return 0; bs_iobytecnt+= 8; if (!xdr_double(xdrs, &(png->png_tlat))) return 0; bs_iobytecnt+= 8; if (!xdr_float(xdrs, &(png->png_tcourse))) return 0; bs_iobytecnt+= 4; png->png_compass.sns_int= bs_ionanf; png->png_compass.sns_nsamps= 0; if (!xdr_float(xdrs, &(png->png_compass.sns_repval))) return 0; bs_iobytecnt+= 4; png->png_depth.sns_int= bs_ionanf; png->png_depth.sns_nsamps= 0; if (!xdr_float(xdrs, &(png->png_depth.sns_repval))) return 0; bs_iobytecnt+= 4; if (!xdr_float(xdrs, &(png->png_alt))) return 0; bs_iobytecnt+= 4; png->png_pitch.sns_int= bs_ionanf; png->png_pitch.sns_nsamps= 0; if (!xdr_float(xdrs, &(png->png_pitch.sns_repval))) return 0; bs_iobytecnt+= 4; png->png_roll.sns_int= bs_ionanf; png->png_roll.sns_nsamps= 0; if (!xdr_float(xdrs, &(png->png_roll.sns_repval))) return 0; bs_iobytecnt+= 4; png->png_snspad= 0; if (!xdr_float(xdrs, &(png->png_temp))) return 0; bs_iobytecnt+= 4; if (!xdr_float(xdrs, &(png->png_ssincr))) return 0; bs_iobytecnt+= 4; png->png_ssyoffsetmode= PNG_SSYOM_UNKNOWN; png->png_magcorr= bs_ionanf; png->png_sndvel= bs_ionanf; png->png_cond= bs_ionanf; png->png_magx= bs_ionanf; png->png_magy= bs_ionanf; png->png_magz= bs_ionanf; if (!mr1_xdrsidev1(&(png->png_sides[ACP_PORT]), xdrs, &sidebc)) return 0; bs_iobytecnt+= sidebc; png->png_sides[ACP_PORT].ps_bdrange= png->png_alt; png->png_sides[ACP_PORT].ps_ssndrmask= 0.; png->png_sides[ACP_PORT].ps_ssyoffset= bs_ionanf; if (!mr1_xdrsidev1(&(png->png_sides[ACP_STBD]), xdrs, &sidebc)) return 0; bs_iobytecnt+= sidebc; png->png_sides[ACP_STBD].ps_bdrange= png->png_alt; png->png_sides[ACP_STBD].ps_ssndrmask= 0.; png->png_sides[ACP_STBD].ps_ssyoffset= bs_ionanf; return 1; }