Fix parse problem
[comedi.git] / scripts / doc_devlist
1 #!/usr/bin/perl -w
2 # vi: set ts=4:
3
4 sub parse_devices;
5
6 @ARGV = ('-') unless @ARGV;
7
8 $ARGV=shift @ARGV;
9 if(!open(FILE,$ARGV)){
10         warn "Can't open $ARGV: $!\n";
11         exit 1;
12 }
13
14 while(<FILE>){
15         push @lines,$_;
16 }
17
18 $driver = "";
19 $mode = 0;
20 while($line=shift @lines){
21         $_ = $line;
22         if( $mode == 0){
23                 if( m/^[\w-]+: / ){
24                         chomp;
25                         $l=$_;
26                         $mode = 1;
27                 }
28         }elsif($mode==1){
29                 if( m/^ / ){
30                         s/^ +//;
31                         chomp;
32                         $l="$l $_";
33                         $mode = 1;
34                 }else{
35                         #print "$l\n";
36                         if($l =~ m/^Driver: /){
37                                 $_ = $l;
38                                 s/^Driver: //;
39                                 $driver = $_;
40                         }
41                         if($l =~ m/^Devices: /){
42                                 $l =~ s/^Devices: //;
43                                 parse_devices($l);
44                         }
45                         $l="";
46                         $mode = 0;
47                         $_ = $line;
48                         if( m/^[\w-]+: / ){
49                                 chomp;
50                                 $l=$_;
51                                 $mode = 1;
52                         }
53                 }
54         }
55 }
56
57
58 sub parse_devices
59 {
60         my $devs = $_[0];
61         my $mfr = "unknown";
62         my $dev = "unknown";
63         my $name = "unknown";
64
65         #print("parse_devices $devs\n");
66
67         while($devs){
68                 $_=$devs;
69                 if(m/^ *\[([^\]]+)\](.*)/){
70                         $mfr = $1;
71                         #print "recognized mfr $mfr\n";
72                         $devs = $2;
73                 }elsif(m/^ *\(([^\)]+)\)(.*)/){
74                         $name = $1;
75                         #print "recognized name $name\n";
76                         $devs = $2;
77                 }elsif(m/^ *([^\(,]+)(.*)/){
78                         $dev = $1;
79                         $devs = $2;
80                         $dev =~ s/ *$//;
81                         #print "recognized dev $dev\n";
82                 }elsif(m/^ *,(.*)/){
83                         $devs = $1;
84                         printf "%-28s %-17s %-17s %-10s\n", $mfr, $dev, $driver, $name;
85                 }else{
86                         print "parse error $_\n";
87                         $devs = "";
88                 }
89         }
90         printf "%-28s %-17s %-17s %-10s\n", $mfr, $dev, $driver, $name;
91 }
92
93