#!/usr/bin/perl
$name="0000000001.002" unless $name=shift;

#open IN,"<0000000013.002" or die "can't read input";
open IN,"< $name " or die "can't read input";


while(read IN,$header,16) {

($DataFormatVersion,
$BlockLength,
$FileType,
$Family,
$FamilyVersion,
$FileExtension,
$SessionSequenceNumber,
$TimeStamp,$Checksum)=unpack("CvCCCCVVC",$header);

print "\nData from: ",scalar localtime ($TimeStamp),"\n";
print "$DataFormatVersion, BL=$BlockLength, $FileType, F=$Family, FV=$FamilyVersion, $FileExtension, Seq=$SessionSequenceNumber, $TimeStamp, $Checksum\n";

$q=read IN,$buf, $BlockLength-16-2;
read IN,$crc,2;
$pos=0;


while($pos<$q) {
	#print "Pos: $pos out of $q\n";
	$code=unpack "C",substr($buf,$pos++,1);
	#printf "code=%x ($code)\n",$code;
	if($code == 0x1) {
		$n=3;
		(@x)=unpack "C"x$n ,substr($buf,$pos);
		$pos+=$n;
		print"$code: Dur=$x[0], $x[1], $x[2]\n";
	} elsif ($code == 4) {	#0x 04
		$n=3;
		(@x)=unpack "C"x$n ,substr($buf,$pos);
		$pos+=$n;
		print"$code: Dur=$x[0], $x[1], $x[2] Puls Pres\n";
	} elsif ($code == 5) {	#0x 05
		$n=3;
		(@x)=unpack "C"x$n ,substr($buf,$pos);
		$pos+=$n;
		print"$code: Dur=$x[0], $x[1], $x[2] Resp Effort\n";
	} elsif ($code == 6) {	#0x 06
		$n=3;
		(@x)=unpack "C"x$n ,substr($buf,$pos);
		$pos+=$n;
		print"$code: Dur=$x[0], $x[1], $x[2] Obstructional A\n";
	} elsif ($code == 7) {	#0x 07
		$n=3;
		(@x)=unpack "C"x$n ,substr($buf,$pos);
		$pos+=$n;
		print"$code: Dur=$x[0], $x[1], $x[2] Clear Airway A\n";
	} elsif ($code == 10) {	#0x 0a
		$n=3;
		(@x)=unpack "C"x$n ,substr($buf,$pos);
		$pos+=$n;
		print"$code: Dur=$x[0], $x[1], $x[2] Hypnopnea\n";
	} elsif ($code == 12) {	#0x c
		$n=3;
		(@x)=unpack "C"x$n ,substr($buf,$pos);
		$pos+=$n;
		print"$code: Dur=$x[0], $x[1], $x[2] Flow Limited \n";
	} elsif ($code == 13) {	#0x d
		$n=2;
		(@x)=unpack "C"x$n ,substr($buf,$pos);
		$pos+=$n;
		print"$code: Dur=$x[0], $x[1] Vib Sno\n";
	} elsif ($code == 14) {	#0x e
		$n=5;
		(@x)=unpack "C"x$n ,substr($buf,$pos);
		$pos+=$n;
		print"$code: Dur=$x[0], $x[1], $x[2], $x[3], $x[4]\n";
	} elsif ($code == 15) {	#0x e
		$n=5;
		(@x)=unpack "C"x$n ,substr($buf,$pos);
		$pos+=$n;
		print"$code: Dur=$x[0], $x[1], $x[2], $x[3], $x[4] CSR\n";
	} elsif ($code == 17) {	#0x 11
		$n=5;
		(@x)=unpack "C"x$n ,substr($buf,$pos);
		$pos+=$n;
		printf "$code: Dur=$x[0], $x[1], leak=$x[2],$x[3],vs=%.1f\n",$x[4]/10.0;
	} elsif ($code == 18) {	#0x 12
		$n=4;
		(@x)=unpack "C"x$n ,substr($buf,$pos);
		$pos+=$n;
		print"$code: Dur=$x[0], $x[1], $x[2], $x[3]\n";
	} else {
		printf "code=$code\n";
	}
}
}
#00 	[02] 		8bit integer	DataFormatVersion
#01	[48 0d] 	16bit integer	BlockLength (in bytes, including header & checksum values)
#03	[00] 		8bit integer	FileType (Defining additional header information)
#04	[05] 		8bit integer	Family
#05	[00] 		8bit integer	Family Version
#06	[02] 		8bit integer	File Extension
#07	[1f 00 00 00] 	32bit integer	Session Sequence Number
#0b	[15 ae 12 4e]	32bit integer 	TimeStamp (UNIX Epoch)

