Root/fab/pos2fab

1#!/usr/bin/perl
2#
3# pos2fab - Condition a KiCAD .pos file for SMT fab use
4#
5# Written 2011 by Werner Almesberger
6# Copyright 2011 Werner Almesberger
7#
8# This program is free software; you can redistribute it and/or modify
9# it under the terms of the GNU General Public License as published by
10# the Free Software Foundation; either version 2 of the License, or
11# (at your option) any later version.
12#
13
14
15sub usage
16{
17    print STDERR "usage: $0 pos-file cmp-file\n";
18    exit(1);
19}
20
21
22if (!defined caller) {
23    &usage unless @ARGV == 2;
24
25    $pos = $ARGV[0];
26    $cmp = $ARGV[1];
27}
28
29open(FILE, $pos) || die "$pos: $!";
30while (<FILE>) {
31    chop;
32    next if /^#/;
33    my @f = split(/\s+/);
34    $pos{$f[0]} = [ $f[2], -$f[3]+0, $f[4] ];
35    push(@order, $f[0]);
36}
37close FILE;
38
39open(FILE, $cmp) || die "$cmp: $!";
40while (<FILE>) {
41    chop;
42    if (/^BeginCmp/) {
43        undef $ref;
44        undef $mod;
45        next;
46    }
47    if (/^Reference\s*=\s*(\S+)\s*;/) {
48        $ref = $1;
49        next;
50    }
51    if (/^IdModule\s*=\s*(\S+)\s*;/) {
52        $mod = $1;
53        next;
54    }
55    next unless /^EndCmp/;
56    $fp{$ref} = $mod;
57}
58close FILE;
59
60return 1 if defined caller;
61
62print "\"Ref\",\"Footprint\",\"PosX(in)\",\"PosY(in)\",\"Rot(ccw)\"\n" || die;
63for (@order) {
64    print "\"$_\",\"$fp{$_}\",$pos{$_}[0],$pos{$_}[1],$pos{$_}[2]\n" ||
65      die;
66}
67

Archive Download this file

Branches:
master



interactive