Rev 280 | Rev 293 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
280 | agaran | 1 | #!/usr/bin/perl -w |
2 | use strict; |
||
3 | # Thu, 13 Nov 2008 21:06:23 +0100 |
||
4 | # Maciej 'agaran' Pijanka <agaran@pld-linux.org> |
||
5 | # for OpenARM SBC Project |
||
6 | # license: gpl v3 |
||
7 | |||
8 | use Getopt::Long qw//; |
||
9 | |||
10 | # ITS UNFINISHED |
||
11 | |||
12 | # idea/todo |
||
13 | # -v for verbose (muiltiple for more) |
||
14 | # -q for quiet or -s for silent? |
||
15 | # |
||
16 | # some file with definitions of required fields |
||
17 | # if not present (default) then hardcoded data will |
||
18 | # be used |
||
19 | # |
||
20 | # split elements by types so defaults/required-fields |
||
21 | # different for different types could be applied |
||
22 | # |
||
281 | jelle | 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" |
||
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 | # |
||
280 | agaran | 44 | # first stage is build list of all data found (no caching concept yet) |
45 | # then find all sch and make bom? or find already done boms? |
||
46 | |||
47 | sub dbg_printf($$@) { |
||
281 | jelle | 48 | my ($lvl, $format, @args) = @_; |
280 | agaran | 49 | |
281 | jelle | 50 | return if ($lvl >= 3) ; |
280 | agaran | 51 | |
281 | jelle | 52 | printf STDERR $format, @args; |
280 | agaran | 53 | } |
54 | |||
55 | sub parse_ifile($) { |
||
281 | jelle | 56 | my ($filepath) = @_; |
280 | agaran | 57 | |
281 | jelle | 58 | open(IN, $filepath) or return 1; |
280 | agaran | 59 | |
281 | jelle | 60 | while (not eof IN) { |
61 | my $line = <IN>; |
||
280 | agaran | 62 | |
281 | jelle | 63 | chomp $line; |
280 | agaran | 64 | |
281 | jelle | 65 | if ($line =~ /^[A-Z][a-z]+[ ]*:[ ]+.*$/) { |
66 | my ($name,$value) = split (/[ ]*:[ ]+/, $line); |
||
67 | if ($name =~ /^price$/i) { |
||
68 | } elsif ($name =~ /^manufacturer$/i) { |
||
69 | } elsif ($name =~ /^description$/i) { |
||
70 | } elsif ($name =~ /^datasheet$/i) { |
||
71 | } elsif ($name =~ /^supplier$/i) { |
||
72 | } elsif ($name =~ /^$/i) { |
||
73 | } else { |
||
74 | dbg_printf(1, "UNHANDLED IDATA %s = %s\n", $name, $value); |
||
75 | } |
||
76 | } else { |
||
77 | dbg_printf(3, "REST %s\n", $line); |
||
78 | } |
||
79 | } |
||
80 | close(IN); |
||
280 | agaran | 81 | |
82 | } |
||
83 | |||
84 | sub build_ifile_list($); |
||
85 | sub build_ifile_list($) { |
||
281 | jelle | 86 | my ($dir) = @_; |
280 | agaran | 87 | |
88 | |||
281 | jelle | 89 | if ( -d $dir) { |
90 | opendir(DIR, $dir) or return 1; |
||
91 | foreach my $e (readdir(DIR)) { |
||
92 | my $fe = $dir .'/'. $e; |
||
93 | if ( -f $fe) { |
||
94 | # Whoo file we have |
||
95 | if ($e =~ /\.[pP][dD][fF]$/) { |
||
96 | # its an pdf file if filename is correct |
||
97 | dbg_printf(3, "PDF %s\n", $fe); |
||
98 | } elsif ($e eq 'information.txt') { |
||
99 | # we found an information.txt file |
||
100 | dbg_printf(2, "IFILE %s\n", $fe); |
||
101 | parse_ifile($fe); |
||
102 | } else { |
||
103 | printf STDERR "FILE %s\n", $fe; |
||
104 | } |
||
105 | } elsif (-d $fe) { # now its dir... |
||
106 | if ($e eq '.svn') { # if entry name is equal to svn |
||
107 | next; # go to next entry in foreach loop |
||
108 | } |
||
109 | next if ($e eq '.' or $e eq '..'); # skip to next if dir entry is . or .. |
||
110 | |||
111 | dbg_printf(3, "DIR %s\n", $fe); |
||
112 | # so we are in dir and not unwanted one |
||
113 | build_ifile_list($fe); |
||
114 | # so scan deeper |
||
115 | } else { |
||
116 | # symlink or other myserius beast |
||
117 | } |
||
118 | } |
||
119 | closedir(DIR); |
||
120 | } |
||
280 | agaran | 121 | } |
122 | |||
123 | build_ifile_list('.'); |
||
124 |