Subversion Repositories OpenARM Single-board Computer

Rev

Rev 280 | Rev 293 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 280 Rev 281
Line 18... Line 18...
18
# be used
18
# be used
19
#
19
#
20
# split elements by types so defaults/required-fields
20
# split elements by types so defaults/required-fields
21
# different for different types could be applied
21
# different for different types could be applied
22
#
22
#
-
 
23
# --verbose
-
 
24
# --file "pathtoschematic"
-
 
25
# --list "id,description,partid,manufacturer,ordercode,quanity,price,total"
-
 
26
# --list "id,description,partid,footprint,refdes,sheet"
-
 
27
# --configfile "pathtoconfigfile:
-
 
28
# --search partid "LD1117S12TR"
23
29
#
-
 
30
# inventory.conf
-
 
31
# path-to-directory-of-external-component-information
-
 
32
# path-to-directory-of-schematics
-
 
33
# match information-source to "information.txt"
-
 
34
# match description to "Description:"
-
 
35
# match manufacturer to "Manufacturer:"
-
 
36
# match ordercode to "Order Code:"
-
 
37
# calculate total per schematics
-
 
38
# calculate total sum of all schematics
-
 
39
# layout asci
-
 
40
# spaces one
-
 
41
# merge schematics information
-
 
42
# seperate schematics information
-
 
43
#
24
# first stage is build list of all data found (no caching concept yet)
44
# first stage is build list of all data found (no caching concept yet)
25
# then find all sch and make bom? or find already done boms?
45
# then find all sch and make bom? or find already done boms?
26
46
27
-
 
28
sub dbg_printf($$@) {
47
sub dbg_printf($$@) {
29
        my ($lvl, $format, @args) = @_;
48
    my ($lvl, $format, @args) = @_;
30
49
31
        return if ($lvl >= 3) ;
50
    return if ($lvl >= 3) ;
32
51
33
        printf STDERR $format, @args;
52
    printf STDERR $format, @args;
34
}
53
}
35
54
36
sub parse_ifile($) {
55
sub parse_ifile($) {
37
        my ($filepath) = @_;
56
    my ($filepath) = @_;
38
57
39
        open(IN, $filepath) or return 1;
58
    open(IN, $filepath) or return 1;
40
59
41
        while (not eof IN) {
60
    while (not eof IN) {
42
                my $line = <IN>;
61
        my $line = <IN>;
43
62
44
                chomp $line;
63
        chomp $line;
45
64
46
                if ($line =~ /^[A-Z][a-z]+[     ]*:[    ]+.*$/) {
65
        if ($line =~ /^[A-Z][a-z]+[     ]*:[    ]+.*$/) {
47
                        my ($name,$value) = split (/[   ]*:[    ]+/, $line);
66
            my ($name,$value) = split (/[   ]*:[    ]+/, $line);
48
                        if ($name =~ /^price$/i) {
67
            if ($name =~ /^price$/i) {
49
                        } elsif ($name =~ /^manufacturer$/i) {
68
            } elsif ($name =~ /^manufacturer$/i) {
50
                        } elsif ($name =~ /^description$/i) {
69
            } elsif ($name =~ /^description$/i) {
51
                        } elsif ($name =~ /^datasheet$/i) {
70
            } elsif ($name =~ /^datasheet$/i) {
52
                        } elsif ($name =~ /^supplier$/i) {
71
            } elsif ($name =~ /^supplier$/i) {
53
                        } elsif ($name =~ /^$/i) {
72
            } elsif ($name =~ /^$/i) {
54
                        } else {
73
            } else {
55
                                dbg_printf(1, "UNHANDLED IDATA %s = %s\n", $name, $value);
74
                dbg_printf(1, "UNHANDLED IDATA %s = %s\n", $name, $value);
56
                        }
75
            }
57
                } else {
76
        } else {
58
                        dbg_printf(3, "REST %s\n", $line);
77
            dbg_printf(3, "REST %s\n", $line);
59
                }
78
        }
60
        }
79
    }
61
        close(IN);
80
    close(IN);
62
81
63
}
82
}
64
83
65
sub build_ifile_list($);
84
sub build_ifile_list($);
66
sub build_ifile_list($) {
85
sub build_ifile_list($) {
67
        my ($dir) = @_;
86
    my ($dir) = @_;
68
87
69
88
70
        if ( -d $dir) {
89
    if ( -d $dir) {
71
                opendir(DIR, $dir) or return 1;
90
        opendir(DIR, $dir) or return 1;
72
                foreach my $e (readdir(DIR)) {
91
        foreach my $e (readdir(DIR)) {
73
                        my $fe = $dir .'/'. $e;
92
            my $fe = $dir .'/'. $e;
74
                        if ( -f $fe) {
93
            if ( -f $fe) {
75
                                # Whoo file we have
94
                # Whoo file we have
76
                                if ($e =~ /\.[pP][dD][fF]$/) {
95
                if ($e =~ /\.[pP][dD][fF]$/) {
77
                                        # its an pdf file if filename is correct
96
                    # its an pdf file if filename is correct
78
                                        dbg_printf(3, "PDF %s\n", $fe);
97
                    dbg_printf(3, "PDF %s\n", $fe);
79
                                } elsif ($e eq 'information.txt') {
98
                } elsif ($e eq 'information.txt') {
80
                                        # we found an information.txt file
99
                    # we found an information.txt file
81
                                        dbg_printf(2, "IFILE %s\n", $fe);
100
                    dbg_printf(2, "IFILE %s\n", $fe);
82
                                        parse_ifile($fe);
101
                    parse_ifile($fe);
83
                                } else {
102
                } else {
84
                                        printf STDERR "FILE %s\n", $fe;
103
                    printf STDERR "FILE %s\n", $fe;
85
                                }
104
                }
86
                        } elsif (-d $fe) { # now its dir...
105
            } elsif (-d $fe) { # now its dir...
87
                                if ($e eq '.svn') { # if entry name is equal to svn
106
                if ($e eq '.svn') { # if entry name is equal to svn
88
                                        next; # go to next entry in foreach loop
107
                    next; # go to next entry in foreach loop
89
                                }
108
                }
90
                                next if ($e eq '.' or $e eq '..'); # skip to next if dir entry is . or ..
109
                next if ($e eq '.' or $e eq '..'); # skip to next if dir entry is . or ..
91
                               
110
92
                                dbg_printf(3, "DIR %s\n", $fe);
111
                dbg_printf(3, "DIR %s\n", $fe);
93
                                # so we are in dir and not unwanted one
112
                # so we are in dir and not unwanted one
94
                                build_ifile_list($fe);
113
                build_ifile_list($fe);
95
                                # so scan deeper
114
                # so scan deeper
96
                        } else {
115
            } else {
97
                                # symlink or other myserius beast
116
                # symlink or other myserius beast
98
                        }
117
            }
99
                }
118
        }
100
                closedir(DIR);
119
        closedir(DIR);
101
        }
120
    }
102
}
121
}
103
122
104
build_ifile_list('.');
123
build_ifile_list('.');
105
124