]> mj.ucw.cz Git - pciids.git/blob - scripts/export.pl
Always jump to list
[pciids.git] / scripts / export.pl
1 #!/usr/bin/perl
2
3 #       PciIds web database
4 #       Copyright (C) 2008 Michal Vaner (vorner@ucw.cz)
5 #
6 #       This program is free software; you can redistribute it and/or modify
7 #       it under the terms of the GNU General Public License as published by
8 #       he Free Software Foundation; either version 2 of the License, or
9 #       (at your option) any later version.
10 #
11 #       This program is distributed in the hope that it will be useful,
12 #       but WITHOUT ANY WARRANTY; without even the implied warranty of
13 #       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 #
15 #       GNU General Public License for more details.
16 #
17 #       You should have received a copy of the GNU General Public License
18 #       along with this program; if not, write to the Free Software
19 #       Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
20
21 use strict;
22 use warnings;
23 BEGIN {
24         unshift @INC, ".";
25 }
26 use PciIds::Db;
27 use PciIds::DBQAny;
28
29 my $tree = shift;
30
31 die "Specify tree to dump as a first parameter\n" unless defined $tree;
32
33 my $db = PciIds::DBQAny::new( connectDb(), {
34         'list' => 'SELECT id, name, note FROM locations WHERE id like ? ORDER BY id'
35 } );
36
37 my $lastInvalid = undef;
38
39 foreach( @{$db->query( 'list', [ "$tree/%" ] )} ) {
40         my( $id, $name, $description ) = @{$_};
41         next if defined $lastInvalid and substr( $id, 0, length $lastInvalid ) eq $lastInvalid;
42         if( !defined $name || $name eq '' ) {
43                 $lastInvalid = $id;
44                 next;
45         }
46         $_ = $id;
47         my $prefix = ( /^PD\/..$/ ) ? 'C ' : '';
48         s/^P.\///;
49         s/[^\/]//g;
50         s/\//\t/g;
51         my $tabs = $_;
52         $id =~ s/.*\///;
53         $id =~ s/([0-9a-f]{4})([0-9a-f]{4})/$1 $2/;
54         if( defined( $description ) && ( $description ne '' ) ) {
55                 chomp $description;
56                 $description =~ s/\n/\n# /g;
57                 print "# $description\n";
58         }
59         print "$tabs$prefix$id  $name\n";
60 }
61
62 $db->commit();