#!/usr/bin/perl open(F, $ARGV[0]); $layer=0; $state[0]="i"; $itype=0; $s=""; $indata=""; $odata=""; $pready=0; while (!eof(F)) { $s.=; while(length($s)>0) { $inputdata=substr($s, 0, 1); substr($s, 0, 1)=""; if ($itype==0) { if ($inputdata eq "d") { $inputdata=""; if ($layer>0) { if ($state[$layer-1] eq "d") { if ($lpc[$layer-1]==1) { print "\n"; } $lpc[$layer-1]=0; } } $state[$layer]="d"; $lpc[$layer]=0; $layer++; } if ($inputdata eq "l") { $inputdata=""; if ($layer>0) { if ($state[$layer-1] eq "d") { if ($lpc[$layer-1]==1) { print "\n"; } $lpc[$layer-1]=0; } } $state[$layer]="l"; $lpc[$layer]=0; $layer++; } if ($inputdata eq "e") { $inputdata=""; $layer--; $itype=0; } if ($inputdata eq "i") { $inputdata=""; $itype=1; $indata=""; } if(($inputdata ge "0")&&($inputdata le "9")) { $itype=2; $indata=""; } } if ($itype==1) { if ($inputdata eq "e") { $odata=$indata; $pready=1; } else { $indata.=$inputdata; } } if ($itype==3) { $odata.=$inputdata; $indata--; if ($indata==0) { $indata=$odata; $pready=1; } } if ($itype==2) { if ($inputdata eq ":") { $itype=3; $odata=""; $inputdata=""; } else { $indata.=$inputdata; } } if ($pready==1) { if ($layer>0) { $ld=$state[$layer-1]; if ($ld eq "d") { $lpn=$lpc[$layer-1]; $lpc[$layer-1]=1-$lpn; if ($lpn==0) { for ($i=0; $i<$layer; $i++) { print " "; } print "$odata"; } else { if ($podata eq "pieces") { print " <>\n"; } elsif ($podata eq "announce") { print " <>\n"; } else { print " $odata\n"; } } } else { for ($i=0; $i<$layer; $i++) { print " "; } print "$odata\n"; } } else { print "Data Ready, $odata\n"; } $pready=0; $itype=0; $podata=$odata; $odata=""; } } } close (F);