#! /usr/bin/gawk -i BEGIN { file_epoch = 0 } /^H/ { Time= $2 - 3 + file_epoch } function magc(d) { if (d >= 0x8000) d -= 0x10000 return d / 0x2000 } function accc(d) { if (d >= 0x8000) d -= 0x10000 return d / 0x4000 } function tempc(d) { if (d >= 0x8000) d -= 0x10000 return d / 0x100 } function adcc(d) { if (d >= 0x8000) d -= 0x10000 return d * 0.4/0x8000 } function isI() { return Time && /^ID/ } isI() { Time += 2 mag_status = $4 mag[0][0] = magc($5) mag[0][1] = magc($6) mag[0][2] = magc($7) mag_temp = tempc($8) acc_status_aux = $9 acc_adc[0] = adcc($10) acc_adc[1] = adcc($11) acc_temp = tempc($12) for (i=1; i<=18; i++) { mag[i][0] = magc($(10 + 3*i)) mag[i][1] = magc($(11 + 3*i)) mag[i][2] = magc($(12 + 3*i)) } acc_status_fifo = $67 acc_status = $68 for (i=0; i<=20; i++) { acc[i][0] = accc($(69 + 3*i)) acc[i][1] = accc($(70 + 3*i)) acc[i][2] = accc($(71 + 3*i)) } mag[19][0] = magc($132) mag[19][1] = magc($133) mag[19][2] = magc($134) } function pr() { printf "IS %d 0x%04x 0x%04x 0x%04x 0x%04x %.2f %.2f %.4f %.4f\n", Time, \ mag_status, acc_status, acc_status_aux, acc_status_fifo, \ mag_temp, acc_temp, acc_adc[0], acc_adc[1] for (i=0; i<20; i++) { printf "IV %.1f %7.4f %7.4f %7.4f %7.4f %7.4f %7.4f\n", Time+i/10, \ mag[i][0], mag[i][1], mag[i][2], \ acc[i][0], acc[i][1], acc[i][2] } }