delete old copy of symbol in wrong directory
[hw/altusmetrum] / packages / soic.5c
1 /*
2  * Copyright © 2012 Keith Packard <keithp@keithp.com>
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; version 2 of the License.
7  *
8  * This program is distributed in the hope that it will be useful, but
9  * WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11  * General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License along
14  * with this program; if not, write to the Free Software Foundation, Inc.,
15  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
16  */
17
18 load "footprint.5c"
19 import Footprint;
20
21 int total_pad = 16;
22 real center_gap = 4.00;
23
24 if (dim(argv) > 1)
25         total_pad = string_to_integer(argv[1]);
26 if (dim(argv) > 2)
27         center_gap = string_to_real(argv[2]);
28
29 real pad_width = 0.60;
30
31 real pad_height;
32
33 if (center_gap > 6)
34         pad_height = 1.50;
35 else
36         pad_height = 1.30;
37
38 real pad_spacing = 1.27;
39
40 int num_pad = total_pad / 2;    /* per side */
41
42 string name = sprintf ("SOIC-%d", total_pad);
43
44 real package_width = (num_pad - 1) * pad_spacing + 1.61;
45
46 real package_height = center_gap + 2 * pad_height + 0.4;
47
48 real pad_y_off = center_gap / 2 + pad_height / 2;
49
50 element_start(name);
51
52 real pad_off(int n) {
53         return pad_spacing * (n - (num_pad - 1) / 2);
54 }
55
56 real corner(int dx, int dy) {
57         real    x = dx * package_width / 2;
58         real    y = dy * package_height / 2;
59         real    len = 0.4;
60
61         line(x, y, x - dx * len, y);
62         line(x, y, x, y - dy * len);
63 }
64
65 corner(-1, -1);
66 corner(1, -1);
67 corner(-1, 1);
68 corner(1, 1);
69
70 real dot_off = -.3;
71
72 line(-package_width/2 + dot_off, package_height/2 - dot_off,
73      -package_width/2 + dot_off, package_height/2 - dot_off);
74
75 for (int pad = 0; pad < num_pad; pad++) {
76         /* bottom (1-num_pad) */
77
78         pad_mm(pad_off(pad),
79                pad_y_off,
80                pad_width,
81                pad_height,
82                sprintf("%d", pad + 1),
83                sprintf("%d", pad + 1));
84         
85         /* top side (total_pad - num_pad+1) */
86
87         pad_mm(pad_off(pad),
88                -pad_y_off,
89                pad_width,
90                pad_height,
91                sprintf("%d", total_pad - pad),
92                sprintf("%d", total_pad - pad));
93         
94 }
95
96 element_end();