Annotation of embedaddon/pciutils/maint/gen-zone, revision 1.1.1.1

1.1       misho       1: #!/usr/bin/perl -w
                      2: # Create a DNS zone with PCI ID records
                      3: 
                      4: use strict;
                      5: 
                      6: my %ids = ();
                      7: my %comments = ();
                      8: foreach our $file (@ARGV) {
                      9:        my $fn = ($file =~ /\.gz$/) ? "zcat $file |" : ($file =~ /\.bz2$/) ? "bzcat $file |" : $file;
                     10:        open F, $fn or die "Unable to open $file: $!";
                     11:        my @id = ();
                     12:        my $comm = "";
                     13:        sub err($) {
                     14:                print STDERR "Error in $file, line $.: @_\n";
                     15:                exit 1;
                     16:        }
                     17:        while (<F>) {
                     18:                if (/^(#.*)/) {
                     19:                        $comm .= $_;
                     20:                        next;
                     21:                }
                     22:                chomp;
                     23:                if (my ($indent, $id, $ignored, $name) = /^(\t*)(([0-9a-fA-Z]+ ?)*)((  |\t|$)\s*(.*))$/) {
                     24:                        my $depth = length $indent;
                     25:                        $depth <= @id or err "Mismatched indentation";
                     26:                        @id = (@id[0..$depth-1], $id);
                     27:                        my $i = join(":", @id);
                     28:                        if ($i ne "") {
                     29:                                !exists $ids{$i} or die "ID $i defined twice";
                     30:                                $ids{$i} = $name;
                     31:                                $comments{$i} = $comm if $comm;
                     32:                        }
                     33:                } elsif (!/^$/) {
                     34:                        err "Parse error";
                     35:                }
                     36:                $comm = "";
                     37:        }
                     38:        close F;
                     39: }
                     40: 
                     41: sub esc($) {
                     42:        my ($x) = @_;
                     43:        $x =~ s/^\s+//;
                     44:        $x =~ s/"/\\"/g;
                     45:        return $x;
                     46: }
                     47: 
                     48: foreach my $i (keys %ids) {
                     49:        my $j = join(".", reverse split(/[: ]/, $i));
                     50:        print "$j.pci\tTXT \"i=", esc($ids{$i}), "\"\n";
                     51:        # print "$j.pci\tTXT \"c=", esc($comments{$i}), "\"\n"
                     52: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>