#!/usr/bin/perl open (IN,"tree.dat"); @dt = ; close IN; $last = $#dt; $patbk = ""; for ($i=$last;$i>=0;$i--){ ($idx,$act,$eol) = split(/\,/,$dt[$i]); if ($act eq "d") {$act = " *** delete ***";} $patlen = length($idx) /2; $pat = &PatternSet($patlen,$patbk); $tree[$i] = &TreeImg($pat,$patbk) . $idx . $act; $patbk = $pat; } for ($i=0;$i<=$last;$i++){ print "$tree[$i]\n"; } exit; sub PatternSet { my ($CurSize,$OldPattern) = @_; my ($OldSize) = length($OldPattern); my ($ANS,$i) ; if ($OldSize == $CurSize) {$ANS = $OldPattern;} else { if ($OldSize < $CurSize) { $i = $CurSize - $OldSize; if ($i > 1) { $i--; $OldPattern .= ("0" x $i); } $ANS = $OldPattern . "1"; } else { $i = length($OldPattern) -2; $ANS = substr($OldPattern,0,$i) . "1"; } } return $ANS; } sub TreeImg { my($NewPat,$OldPat) = @_; my($NewPatLen,$WKimg,$i,@Nchar,@Ochar); $WKimg = ""; @Nchar = split(//,$NewPat); @Ochar = split(//,$OldPat); $NewPatLen = $#Nchar; for ($i=0;$i<=$NewPatLen;$i++) { if ($i < $NewPatLen) { if ($Nchar[$i] eq "1") {$WKimg .= "„«";} else {$WKimg .= "@";} } else { if ($Ochar[$i] eq "1") {$WKimg .= "„°";} else {$WKimg .= "„¯";} } } return $WKimg; }