new file mode 100755
--- /dev/null
+++ b/listHdr
@@ -0,0 +1,174 @@
+#!/usr/bin/perl
+#======================================================================
+# L I S T H D R
+# doc: Sat Jan 18 18:41:49 2003
+# dlm: Wed Jul 9 13:30:35 2008
+# (c) 2003 A.M. Thurnherr
+# uE-Info: 66 0 NIL 0 0 72 8 2 4 NIL ofnI
+#======================================================================
+
+# Print useful info from the RDI BB header
+
+# HISTORY:
+# Jan 18, 2003: - incepted as a test for [WorkhorseBinRead.pl]
+# Jan 19, 2003: - continued
+# Feb 14, 2003: - added BT setup params
+# Mar 15, 2003: - added and removed BATTERY
+# Feb 24, 2004: - corrected TRANSMIT_LAG_DISTANCE units
+# Feb 26, 2004: - added ENSEMBLE_LENGTH
+# - added FIRMWARE
+# Mar 4, 2004: - added transducer orientation
+# Mar 30, 2004: - decified firmware output
+# Sep 14, 2005: - made BT data optional, dep. on NUMBER_OF_DATA_TYPES
+# - added DATA_FORMAT & related
+# Sep 15, 2005: - change BinRead library name
+# - compacted output format
+# Oct 30, 2005: - shuffled stuff, added DATA_FORMAT_VARIANT
+# Aug 21, 2006: - added CPU_SERIAL_NUMBER
+# - added usage error
+# Sep 19, 2007: - adapted to new [RDI_BB_Read.pl] (not tested)
+# Jul 9, 2008: - added output regarding available sensors
+
+$0 =~ m{(.*/)[^/]+};
+require "$1RDI_BB_Read.pl";
+
+die("Usage: $0 <RDI file[...]>\n")
+ unless (@ARGV);
+
+while (-f $ARGV[0]) {
+ print("$ARGV[0]:\n");
+ readHeader(@ARGV,\%hdr);
+ shift;
+
+ print(" Instrument Characteristics:\n");
+
+ printf("\tCPU_SERIAL_NUMBER\t\t= %s\n",$hdr{CPU_SERIAL_NUMBER});
+ printf("\tFIRMWARE\t\t\t= %d.%d\n",$hdr{CPU_FW_VER},$hdr{CPU_FW_REV});
+ printf("\tBEAM_FREQUENCY\t\t\t= %d kHz\n",$hdr{BEAM_FREQUENCY});
+ printf("\tBEAM_ANGLE\t\t\t= %d deg\n",$hdr{BEAM_ANGLE});
+ printf("\tN_BEAMS\t\t\t\t= %d\n",$hdr{N_BEAMS});
+ printf("\tN_DEMODS\t\t\t= %d\n",$hdr{N_DEMODS}) if defined($hdr{N_DEMODS});
+
+ printf("\tSensors\t\t\t\t: ");
+ printf("PRESSURE ") if ($hdr{PRESSURE_SENSOR_AVAILABLE});
+ printf("CONDUCTIVITY ") if ($hdr{CONDUCTIVITY_SENSOR_AVAILABLE});
+ printf("TEMPERATURE ") if ($hdr{TEMPERATURE_SENSOR_AVAILABLE});
+ printf("COMPASS ") if ($hdr{COMPASS_AVAILABLE});
+ printf("PITCH ") if ($hdr{PITCH_SENSOR_AVAILABLE});
+ printf("ROLL ") if ($hdr{ROLL_SENSOR_AVAILABLE});
+ print("\n");
+
+ printf("\tFlags\t\t\t\t: ");
+ printf("XDUCER_HEAD_ATTACHED ") if ($hdr{XDUCER_HEAD_ATTACHED});
+ printf("CONVEX_BEAM_PATTERN ") if ($hdr{CONVEX_BEAM_PATTERN});
+ printf("CONCAVE_BEAM_PATTERN ") if ($hdr{CONCAVE_BEAM_PATTERN});
+ print("\n");
+
+
+ print(" File Format:\n");
+
+ printf("\tDATA_FORMAT\t\t\t= %s (variant %d)\n",
+ $hdr{DATA_FORMAT},$hdr{DATA_FORMAT_VARIANT});
+ printf("\tNUMBER_OF_DATA_TYPES\t\t= %d\n",$hdr{NUMBER_OF_DATA_TYPES});
+ printf("\tENSEMBLE_BYTES\t\t\t= %3d bytes\n",$hdr{ENSEMBLE_BYTES});
+ printf("\tHEADER_BYTES\t\t\t= %3d bytes\n",$hdr{HEADER_BYTES});
+ printf("\tFIXED_LEADER_BYTES\t\t= %3d bytes\n",$hdr{FIXED_LEADER_BYTES});
+ printf("\tVARIABLE_LEADER_BYTES\t\t= %3d bytes\n",$hdr{VARIABLE_LEADER_BYTES});
+ printf("\tVELOCITY_DATA_BYTES\t\t= %3d bytes\n",$hdr{VELOCITY_DATA_BYTES});
+ printf("\tCORRELATION_DATA_BYTES\t\t= %3d bytes\n",$hdr{CORRELATION_DATA_BYTES});
+ printf("\tECHO_INTENSITY_DATA_BYTES\t= %3d bytes\n",$hdr{ECHO_INTENSITY_DATA_BYTES});
+ printf("\tPERCENT_GOOD_DATA_BYTES\t\t= %3d bytes\n",$hdr{PERCENT_GOOD_DATA_BYTES});
+ printf("\tBT_DATA_BYTES\t\t\t= %3d bytes\n",$hdr{BT_DATA_BYTES})
+ if ($dta->{BT_PRESENT});
+
+
+ print(" Coordinate System:\n");
+
+ printf("\tHEADING_ALIGNMENT_CORRECTION\t\t= %g deg\n",
+ $hdr{HEADING_ALIGNMENT_CORRECTION})
+ if defined($hdr{HEADING_ALIGNMENT_CORRECTION});
+ printf("\tHEADING_BIAS_CORRECTION\t\t= %g deg\n",
+ $hdr{HEADING_BIAS_CORRECTION})
+ if defined($hdr{HEADING_BIAS_CORRECTION});
+ print("\tFlags\t\t\t\t: ");
+ printf("BEAM_COORDINATES ") if ($hdr{BEAM_COORDINATES});
+ printf("INSTRUMENT_COORDINATES ") if ($hdr{INSTRUMENT_COORDINATES});
+ printf("SHIP_COORDINATES ") if ($hdr{SHIP_COORDINATES});
+ printf("EARTH_COORDINATES ") if ($hdr{EARTH_COORDINATES});
+ printf("PITCH_AND_ROLL_USED ") if ($hdr{PITCH_AND_ROLL_USED});
+ printf("BIN_MAPPING_ALLOWED ") if ($hdr{ALLOW_BIN_MAPPING});
+ print("\n");
+
+
+ if ($hdr{SPEED_OF_SOUND_CALCULATED}) {
+ print(" Speed-of-Sound Sensors Used:\n");
+ printf("\tPRESSURE_SENSOR_USED\n") if ($hdr{PRESSURE_SENSOR_USED});
+ printf("\tCOMPASS_USED\n") if ($hdr{COMPASS_USED});
+ printf("\tPITCH_SENSOR_USED\n") if ($hdr{PITCH_SENSOR_USED});
+ printf("\tROLL_SENSOR_USED\n") if ($hdr{ROLL_SENSOR_USED});
+ printf("\tCONDUCTIVITY_SENSOR_USED\n")
+ if ($hdr{CONDUCTIVITY_SENSOR_USED});
+ printf("\tTEMPERATURE_SENSOR_USED\n")
+ if ($hdr{TEMPERATURE_SENSOR_USED});
+ print("\n");
+ }
+
+
+ print(" Bin Setup:\n");
+ printf("\tN_BINS\t\t\t\t= %d\n", $hdr{N_BINS});
+ printf("\tBLANKING_DISTANCE\t\t= %g m\n", $hdr{BLANKING_DISTANCE});
+ printf("\tTRANSMIT_LAG_DISTANCE\t\t= %g m\n",
+ $hdr{TRANSMIT_LAG_DISTANCE});
+ printf("\tDISTANCE_TO_BIN1_CENTER\t\t= %g m\n",
+ $hdr{DISTANCE_TO_BIN1_CENTER});
+ printf("\tBIN_LENGTH\t\t\t= %g m\n", $hdr{BIN_LENGTH});
+ printf("\tTRANSMITTED_PULSE_LENGTH\t= %g m\n",
+ $hdr{TRANSMITTED_PULSE_LENGTH});
+ printf("\tRL_FIRST_BIN\t\t\t= %d\n", $hdr{RL_FIRST_BIN});
+ printf("\tRL_LAST_BIN\t\t\t= %d\n", $hdr{RL_LAST_BIN});
+
+
+ print(" Water-Track Setup:\n");
+ printf("\tPINGS_PER_ENSEMBLE\t\t= %d\n", $hdr{PINGS_PER_ENSEMBLE});
+ printf("\tTIME_BETWEEN_PINGS\t\t= %g s\n",$hdr{TIME_BETWEEN_PINGS});
+ printf("\tTRANSMIT_POWER\t\t\t= %d\n", $hdr{TRANSMIT_POWER});
+ printf("\tMIN_CORRELATION\t\t\t= %d\n", $hdr{MIN_CORRELATION});
+ printf("\tMIN_PERCENT_GOOD\t\t= %d %%\n", $hdr{MIN_PERCENT_GOOD});
+ printf("\tMAX_ERROR_VELOCITY\t\t= %g m/s\n",
+ $hdr{MAX_ERROR_VELOCITY});
+ printf("\tFALSE_TARGET_THRESHOLD\t\t= %d\n",
+ $hdr{FALSE_TARGET_THRESHOLD})
+ if defined($hdr{FALSE_TARGET_THRESHOLD});
+ printf("\tFlags\t\t\t\t: ");
+ printf("NARROW_BANDWIDTH ") if ($hdr{NARROW_BANDWIDTH});
+ printf("WIDE_BANDWIDTH ") if ($hdr{WIDE_BANDWIDTH});
+ printf("TRANSMIT_POWER_HIGH ") if ($hdr{TRANSMIT_POWER_HIGH});
+ printf("USE_3_BEAM_ON_LOW_CORR ") if ($hdr{USE_3_BEAM_ON_LOW_CORR});
+ print("\n");
+
+#----------------------------------------------------------------------
+
+ if ($hdr{NUMBER_OF_DATA_TYPES} == 7) {
+ print(" Bottom-Track Setup:\n");
+ printf("\tBT_MODE\t\t\t\t= %d\n", $hdr{BT_MODE});
+ printf("\tBT_PINGS_PER_ENSEMBLE\t\t= %d\n",
+ $hdr{BT_PINGS_PER_ENSEMBLE});
+ printf("\tBT_TIME_BEFORE_REACQUIRE\t= %g s\n",
+ $hdr{BT_TIME_BEFORE_REACQUIRE});
+ printf("\tBT_MIN_CORRELATION\t\t= %d\n",$hdr{BT_MIN_CORRELATION});
+ printf("\tBT_MIN_EVAL_AMPLITUDE\t\t= %d\n",
+ $hdr{BT_MIN_EVAL_AMPLITUDE});
+ printf("\tBT_MIN_PERCENT_GOOD\t\t= %d %%\n",
+ $hdr{BT_MIN_PERCENT_GOOD});
+ printf("\tBT_MAX_ERROR_VELOCITY\t\t= %g m/s\n",
+ $hdr{BT_MAX_ERROR_VELOCITY})
+ if defined($hdr{BT_MAX_ERROR_VELOCITY});
+ printf("\tBT_RL_MIN_SIZE\t\t\t= %g m\n", $hdr{BT_RL_MIN_SIZE});
+ printf("\tBT_RL_NEAR\t\t\t= %g m\n", $hdr{BT_RL_NEAR});
+ printf("\tBT_RL_FAR\t\t\t= %g m\n", $hdr{BT_RL_FAR});
+ printf("\tBT_MAX_TRACKING_DEPTH\t\t= %g m\n"
+ , $hdr{BT_MAX_TRACKING_DEPTH});
+ }
+}
+
+