undef $/;

mkdir "valids";

for $f (@ARGV) {
    open IN, '<', $f;
    $_ = <IN>;
    
    if (/(static\s+)?int\s+\w*valid\s*\([^()]+\)\s*\{.*?^\}/sm) {
        # save valid() definition in a file
        open OUT, '>', "valids/$f";
        print OUT "$&\n";
        close OUT;
        # remember it
        push @{$valids{$&}}, $f;
    }

    close IN;
}

for (keys %valids) {
    for (sort @{$valids{$_}}) {
        print "$_ ";
    }
    print "\n";
}
