--- /dev/null
+CDU
+ 434-7821 1 TIP120 main transistor
+ 707-363 1= 7.7C/W heatsink
+ 342-117 1 2r sense power resistor
+ std 150 1 divider
+ 347-012 1 200r trimmer
+ r 0w4 1k5 1 divider
+ 358-824 1 2N3904 enable transistor
+ std 4k3 1 enable
+ 536-027 1 10000uF main capacitor
+ r 0w4 1k5 1 load
+
+Booster core
+ std 33k 1 pwm pulldn
+ std 2k2 1 overload base
+ std 22k 1 overload up
+ std 150r 1 overload led series
+ c cer 10n 2 bootstrap
+
+ICSP VPP/mclr
+ std 330r 1
+ std 720r 1
+ std 220k 1
+ std 2k2 2
+ c cer 100n
+ in4148 1
+ 74f07 1/6
+
+ICSP PC
+ std 220k 2
+ 74hct04 2/6
+ 74f07 1/6
+ 74hc595a 1
+ per SR
+ std 220k 1
+ 74hct04 1/6
+ per PIC
+ std 3k3 1
+ std 68k 1
+
+ICSP PD
+ std 1k 1
+ bat86 2@pic
+ std 22k 2
+ std 220k 1
+ 74hct04 2/6
+ 74f07 1
+ 1n4148 1
+
+Point solenoid
+ per Half-point
+ 483-3363 1 stp22nf03l power FET
+ 352-5351 1 1n5401 freewheel diode
+ per Half-point-discrete
+ std 330r
+ per Half-point-dil7
+ 149-002 1/7 470r x7 dil network
+ per Half-point-dil8
+ 476-468 1/8 330r x8 dil network
+
+Track polarity control
+ per Reverse-segment
+ 309-3190 1 MR82-12USR relay
+ uln2803ap 1/8
+ c cer 100n 1/8 decouple
+
+Block current sense
+ per Sense-segment
+ 330-7578 1 CP201 bridge rectifier
+ std 56r 1
+ 325-958 1/4 TLP521-4A optocoupler
+ per Sense-segment-discrete
+ std 100k 1
+ per Sense-segment-sil8
+ 148-988 1/8 100k x8 sil network
+ 148-999 1/9 100k x9 sil network
+
+Serial Port
+ 407-203 1 nm232dd
+ c cer 100n 1 decouple
+ 166-856 2 p6ke13ca 13v transorb
+ 74f07 1/6
+ std 3k9 1
+
+Indicators
+ 621-419 2 LFW5WAEMGMBW diffused RGB led
+ std 150r 1
+ r 0w4 330r 2
+ r 0w4 470r 1
+ 1n4148 4
+ bzx79-c2v4 1
+ r 0w4 680r 1
+ 346-755 1 200r trimmer 3386x
+ 346-767 1 500r trimmer 3386x
+ std 36r 1
+ r 0w4 390r 1
+ r 0w4 180r 2
+
+Booster and power comp
+ 595-743 1 4C/W heatsink (for fet)
+ 167-927 1 irf5305 power fet
+ 287-064 1 1uF hf ceramic
+ 407-720 1 lmd18200t
+ 253-716 1 1.65C/W heatsink (for 18200)
+ 489-712 1 330r 2W carbon film (load)
+ bat86 4
+ std 5k1 1
+ std 6k2 1
+ bzx55-c8v2 2
+ std 2k4 1
+ std 1k3 1
+ std 3k9 1
+ std 3k0 1
+ std 1k8 1
+ 347-723 1 1k 12-turn trimmer 3266x
+ std 910r 1
+ 400-816 1 lf356n op-amp
+ std 330k 1
+ std 10k 1
+ bzx55-c8v2 1
+ std 20k 1
+ c pana 100u 1
+ c cer 100n 1
+
+PIC core
+ std 3k9 2
+ 221-480 1
+ per PIC
+ 411-3822 pic18f458-i/p
+ c cer 100n 1
+
+Power supplies
+ 432-9363 1 pse65-18 18v 4.4a psu
+ 149-324 1 panel power plug
+ 149-323 1 panel power socket
+ 285-894 1 954/uk4 apem spst switch
+ 152-255 1 5666a9 apem 4pco switch
+ 327-8013 1 2r2 metal film
+ 327-0737 1 6r8 7w vitreous enamel
+ 342-117 1 2r 3.5w vitreous enamel
+ 170-074 2 9.9C/W sink for L78xx's
+ c pana 100u 2
+ c poly 330n 2
+ c cer 100n 2
+ 412-764 1 l7805cv
+ 413-203 1 l7812cv
+
+74f07 = 376-632 OC buffer
+74hct04 = 382-759 hex inverter
+74hc595a = 701-610 shift register
+
+uln2803ap = 318-7032 low-side relay driver
+
+bzx55-c8v2 = 369-020
+bzx79-c2v4 = 369-329
+
+c poly 330n = 546-240 0.33uF polyester
+c pana 100u = 319-8765 100uF 25V electrolytic
+
+r 0w4 ? = resistor 0.4W
+r 0w4 180r = 513-842
+r 0w4 330r = 331-995
+r 0w4 390r = 513-921
+r 0w4 470r = 332-010
+r 0w4 680r = 332-033
+r 0w4 1k5 = 332-070
+r 0w4 1k8 = 332-082
--- /dev/null
+#!/usr/bin/perl
+
+sub by_item ($) {
+ my ($itemcode) = @_;
+ # looks up $itemcode (ddd-d...) at Farnell and returns
+ # cat hash ref
+ local ($_);
+ my ($chr,$shortcode,$sc2,$url);
+ $url= 'http://uk.farnell.com/jsp/catalog/viewproductdetails.jsp?prodId=';
+ $itemcode =~ m/^(\d\d\d)\-(\d{3,7})$/ or die;
+ $chr->{Item}= $itemcode;
+ $chr->{Shortcode}= $1.$2;
+ $url .= $chr->{Shortcode};
+ if (!-f "farn.$itemcode") {
+ system "wget -otmp.farnerr.$itemcode -Otmp.farn.$itemcode $url";
+ if ($?) { system "cat tmp.farnerr.$itemcode"; die; }
+ rename "tmp.farn.$itemcode", "farn.$itemcode" or die $!;
+ unlink "tmp.farnerr.$itemcode";
+ }
+ $_= `cat farn.$itemcode`; $? and die $?;
+ s/[^\n\t\x20-\x7e]/\?/g;
+ $sc2= snarf('Order Code / Sku');
+ die "wrong results $snarf ?" unless $sc2 eq $chr->{Shortcode};
+ $chr->{Description}= snarf('Description');
+ $chr->{Avail}= snarf('Stock Availability');
+ $chr->{MinOrder}= snarf('Minimum Order');
+ $chr->{Multiple}= snarf('Order Multiple');
+ return $chr;
+}
+
+sub snarf ($) {
+ my ($thing) = @_;
+ m!
+\<td class="tabledata"(?: width="\d+%")?\>$thing</td>
+\<td class="tabledata"(?: width="\d+%")?\>
+(.+)(?:\n\ \;)*
+\</td>
+!
+ or die "no $thing ?";
+ return $1;
+}
+
+sub read_spec () {
+ local ($_);
+ for (;;) {
+ $!=0; $_=<F>; die unless length $_;
+ chomp; s/\s+$//;
+ last if m/^end$/;
+ next if m/^\#/ || !m/\S/;
+
+ if (m/^
+ $section=
+
+if (@ARGV==1 && @ARGV[0] =~ m/^(\d\d\d\-)/) {
+ $chr= by_item($ARGV[0]);
+ foreach $k (sort keys %$chr) {
+ printf "%-20s %s\n", $k, $chr->{$k} or die $!;
+ }
+} elsif (@ARGV==1) {
+ open F, "< $ARGV[0]" or die $!;
+ read_spec();
+ close F or die $!;
+ analyse_spec();
+ dump_results();
+}