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