Add helper scripts

Change-Id: I196523408d195aa73a7d47b0b6ea9e800bcf7f4e
diff --git a/motors/big_schematic/check_refdes.rb b/motors/big_schematic/check_refdes.rb
new file mode 100755
index 0000000..1770e9d
--- /dev/null
+++ b/motors/big_schematic/check_refdes.rb
@@ -0,0 +1,42 @@
+#!/usr/bin/env ruby
+
+require './gschem_file'
+require 'pp'
+
+if ARGV.size == 0
+  filenames = Dir.glob('**/*.{sch,sym}')
+else
+  filenames = get_schematic_filenames ARGV
+end
+
+seen = {}
+
+filenames.each do |filename|
+  file = GschemSchematic.new(filename)
+
+  file.components.each do |component|
+  	refdes = component.refdes
+	slot = component[:slot]
+	if !refdes
+	  if !component.is_power
+	  	puts "Warning: #{component.inspect} does not have a refdes."
+	  end
+	elsif !seen.has_key? refdes
+	  seen[refdes] = [[filename, slot]]
+	else
+	  if seen[refdes][0][1] == nil && slot == nil
+	  	puts "Error: duplicate unslotted component #{refdes} in #{seen[refdes].collect { |a| a[0] }.inspect}."
+	  elsif (seen[refdes][0][1] == nil) != (slot == nil)
+	  	puts "Error: slotted and unslotted component #{refdes} at #{seen[refdes].collect { |a| "#{a[1] || 'none'} in #{a[0]}" }.inspect}."
+      else
+        seen[refdes].each do |_, s|
+          if s == slot
+	  	    puts "Error: duplicate slotted component #{refdes}:#{slot} in #{seen[refdes].collect { |a| a[0] if a[1] == slot }.compact.inspect}."
+            break
+          end
+        end
+      end
+      seen[refdes].push [filename, slot]
+	end
+  end
+end