14a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#!/usr/localbin/perl
24a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
34a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectuse Getopt::Long;
44a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectuse File::Basename;
54a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectuse lib dirname($0);
64a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
74a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project$assume_invocab = 0; # _when_semantics_missing
84a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project$rc = GetOptions("add=s" => \@additional_fields,
94a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project		 "invocab" => \$assume_invocab,
104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project		 "quiet" => \$quiet,
114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project		 "semantic" => \$try_semantic_validation,
124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project		 "altsem=s" => \$altsemfile,
134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project                 );
144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectmy @fields = ("file", "correct", "invocab", "gdiff", "sd", "sd13", "spf", "abs", "gdiffpf", "rejrslt", "rankc", "match", "ortho", "choice1", "choice2", "score1", "conf", "gender");
164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectif($try_semantic_validation) {
184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    push(@additional_fields,"parsed_ortho");
194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectpush(@fields, @additional_fields);
214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectforeach $additional_field (@additional_fields) {
224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    $additional_fieldh{$additional_field}++;
234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectload_altsemfile($altsemfile) if($altsemfile);
264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project$| = 1;
284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectif(@ARGV[0] =~ /^@/) {
304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    $flist = substr($ARGV[0],1);
314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    @resfiles = `cat $flist`;
324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    grep { s/\s+$// } @resfiles;
334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} else {
344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    @resfiles = @ARGV;
354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectforeach $resfile (@resfiles) {
384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    ($base = $resfile) =~ s/\.[a-z]+$//i;
394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    $utdfile = "$base.utd";
404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    # print "processing $resfile to $utdfile\n" unless($quiet);
424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    open(RES, "<$resfile") || die "error opening $resfile\n";
434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    open(UTD, ">$utdfile") || die "error opening $utdfile\n";
444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    $hUTD = \*UTD;
454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    undef %results;
464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    while(<RES>) {
474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	s/\s+$//;
484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        s/^\s+//;
494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	if(/^D:\s+(\S+)\s*$/) { # same as CREC
504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    $file = $1;
514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    if(defined %token) {
524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project		process(\%token, \%results);
534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project		dump_record($hUTD, \%token);
544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    } else {
554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project		dump_header($hUTD);
564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    }
574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    undef %token;
584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    $token{file} = $file;
594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    $file =~ /ENU-(\d\d\d)-/;
604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    $token{gender} = $gender{$1};
614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    $token{"snr"} = get_snr($file) if($additional_fieldh{"snr"});
624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    $token{"snrr"} = sprintf("%.2d",int(get_snr($file)/5+0.5)*5) if($additional_fieldh{"snrr"});
634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	} elsif(/^C:\s+(.*)$/) { # same as CREC
644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    $token{ortho} = normalize($1);
654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	} elsif(/^\s*(\S+) = (.*)$/) {
664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    ($augkey,$augval) = ($1,$2);
674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    if($augkey eq "feedback") {
684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project		$token{parsed_ortho} = $augval;
694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project		$token{invocab}++;
704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    }
714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	} elsif(/^R:\s+(.*)$/) { # same as CREC
724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    if(/<rejected/i || /<FAILED/i) {
734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project		$token{rejrslt} = "f";
744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    } else {
754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project		# $token{topchoice} = $1;
764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project		$token{rejrslt} = "a";
774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    }
784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	} elsif(/^Sem[^:]+:  invocab=(\d)/) { # same as CREC
794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    $token{invocab} = 1;
804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	} elsif(/^CSem:\s+([a-z]+.*)\s*$/i) {
814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    $token{parsed_ortho} = $1;
824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	} elsif(/^Sem:(\s+)(\S+)/) { # same as CREC
834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    $token{invocab} = 0;
844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	} elsif(/^LITERAL\[\s*0\]\s*:\s*\'(.*)\'/) {
854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    $choice = $1;
864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    $token{choices}[0] = $choice;
874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	} elsif(/^LITERAL\[\s*(\d+)\]\s+:\s+\'(.*)\'/) {
884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    $i = $1;
894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    $choice = $2;
904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    /.*\: \'(.*)\'/;
914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    $choice = $1;
924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    $token{choices}[$i] = $choice;
934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	} elsif(/^MEANING\[\s*(\d+)\]\s+:\s+\'(.*)\'/) {
944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    $i = $1;
954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    $choice = $2;
964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    /.*\: \'(.*)\'/;
974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    $choice = $1;
984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    $choice =~ s/\s+$//;
994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    $token{meanings}[$i] = $choice;
1004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	} elsif(/^LITERAL\[(\d+)\]\[(\d+)\]\s+:\s+\'(.*)\'/) {
1014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    $i = $1;
1024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    $score = $2;
1034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    $token{scores}[$i] = $score;
1044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	} elsif(/^RAW SCORE\s+:\s+\'(.*)\'/) {
1054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    $token{topscore} = $1;
1064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	} elsif(/^gdiff\s+(.*)$/){
1074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project            $token{gdiff} = $1;
1084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        } elsif(/^sd13\s+(.*)$/){
1094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project            $token{sd13} = $1;
1104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        } elsif(/^spf\s+(.*)$/){
1114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project            $token{spf} = $1;
1124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        } elsif(/^abs\s+(.*)$/){
1134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project            $token{abs} = $1;
1144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        } elsif(/^gdiffpf\s+(.*)$/){
1154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project            $token{gdiffpf} = $1;
1164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        } elsif(/^sd\s+(.*)$/){
1174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project            $token{sd} = $1;
1184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        } elsif(/^CONFIDENCE SCORE\s+:\s+\'(.*)\'/) {
1194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project            $token{conf} = $1;
1204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        }
1214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
1224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    process(\%token, \%results) if(defined %token);
1234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    dump_record($hUTD, \%token) if(defined %token);
1244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    close(UTD);
1254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    close(RES);
1264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    undef %token;
1274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    $results{total} ||= 1;
1284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    $rr = $results{correct}/$results{total} * 100;
1294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    $rr = int($rr*10 + 0.5)/10;
1304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    print sprintf("%-45s RR %4.1f %d/%d (%d oovs)\n", $base, $rr, $results{correct}, $results{total}, $results{numoovs});
1314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectsub process
1354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
1364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    my $token = shift(@_);
1374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    my $results = shift(@_);
1384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    $token->{invocab} = 1 if($assume_invocab);
1394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if(defined $token{topchoice}) {
1404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	$token->{choices}[0] = $token{topchoice};
1414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
1424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if(defined $token{topscore}) {
1434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	$token->{scores}[0] = $token{topscore};
1444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
1454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    my $ortho = lc($token->{ortho});
1464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    my $topch = lc($token->{choices}[0]);
1474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    $ortho =~ s/_/ /g;
1494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    $topch =~ s/_/ /g;
1504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    $topch =~ s/\s\s+/ /g;
1514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    $ortho =~ s/\s\s+/ /g;
1524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if($token->{invocab} == 0) {
1534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	$token->{correct} = "0";
1544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	$results->{numoovs}++;
1554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    } elsif($topch eq $ortho) {
1564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	$results->{total}++;
1574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	$results->{correct}++;
1584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	$token->{correct} = "1";
1594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    } else {
1604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	$results->{total}++;
1614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	# print "$token->{file} MEANINGCMP: ==$token->{meanings}[0]== ==$token->{parsed_ortho}==\n";
1624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	if($altsemfile) {
1634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    if($token->{parsed_ortho} ne $csemtags{$token->{file}}) {
1644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project		# print "changing $token{parsed_ortho} ne $csemtags{$token->{file}}\n";
1654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project		$token->{parsed_ortho} = $csemtags{$token->{file}};
1664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    }
1674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	}
1684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	if(not $try_semantic_validation) {
1704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    $token->{correct} = "0";
1714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	} else {
1724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    if($token->{meanings}[0] eq $token->{parsed_ortho} && length($token->{parsed_ortho})>0) {
1734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project		$token->{correct} = "1";
1744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project		$results->{correct}++ ;
1754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    } else {
1764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project		$token->{correct} = "0";
1774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    }
1784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	}
1794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
1804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    $token->{rankc} = 0;
1814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    my $nchoices = scalar(@{$token->{choices}});
1824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    for($i=0; $i<$nchoices; $i++) {
1834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	my $choice = lc $token->{choices}[$i];
1844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	$choice =~ s/_/ /g;
1854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	if($choice eq $ortho) {
1864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    $token->{rankc} = $i+1;
1874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    last;
1884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	}
1894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
1904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    $token->{gender} = "?";
1914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectsub dump_record
1944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
1954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    my $HH = shift(@_);
1964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    my $token = shift(@_);
1974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    foreach $field (@fields) {
1984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project          if ($field =~ /^sd13$/){
1994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project          print UTD "$token->{$field}" , ":";
2004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	} elsif($field =~ /^(\S+)(\d+)$/) {
2014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	  $name = "${1}s";
2024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	  $num = $2 - 1;
2034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	  print UTD "$token->{$name}[$num]", ":";
2044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	} else{
2054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project          print UTD "$token->{$field}" , ":";
2064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	}
2074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
2084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    print UTD "\n";
2094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
2104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectsub dump_header
2124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
2134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    my $HH = shift(@_);
2144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    foreach $field (@fields) {
2154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	print UTD "$field" , ":";
2164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
2174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    print UTD "\n";
2184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
2194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectsub normalize
2214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
2224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    my $k = shift(@_);
2234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    $k =~ s/\s\s+/ /g;
2244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    $k =~ s/\:/\;/g;
2254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    $k =~ s/\[[^\]]+\]//g;
2264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    $k =~ s/^\s+//g;
2274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    $k =~ s/\s+$//g;
2284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return $k;
2294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
2304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectsub load_altsemfile
2324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
2334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    my $semfile = shift(@_);
2344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    open(SM,"<$semfile") || die "error: opening $semfile\n";
2354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    while(<SM>) {
2364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	if(/D: (\S+)$/) {
2374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    $file = $1;
2384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    $file =~ s/\s+$//;
2394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	} elsif(/^CSem:\s+([a-z]+.*)\s*$/i) {
2404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    $csemtags{$file} = $1;
2414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    $csemtags{$file} =~ s/\s+$//;
2424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	} elsif(/^Sem[^:]+:  invocab=(\d)/) { # same as CREC
2434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    $semtags{$file} = 1;
2444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	} elsif(/^Sem:(\s+)(\S+)/) { # same as CREC
2454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    $semtags{$file} = 0;
2464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	}
2474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
2484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    close(SM);
2494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
2504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
251