4 # PCB, interactive printed circuit board design
5 # Copyright (C) 1994,1995,1996 Thomas Nau
7 # This program is free software; you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; either version 2 of the License, or
10 # (at your option) any later version.
12 # This program is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
17 # You should have received a copy of the GNU General Public License
18 # along with this program; if not, write to the Free Software
19 # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 # Contact addresses for paper mail and Email:
22 # Thomas Nau, Schlehenweg 15, 88471 Baustetten, Germany
23 # Thomas.Nau@rz.uni-ulm.de
29 # -------------------------------------------------------------------
30 # the definition of a SD (ZIP) package
31 # based on 'old style format' by Olaf Kaluza (olaf@criseis.ruhr.de)
33 # For example, see http://focus.ti.com/lit/ml/mczi002/mczi002.pdf
34 # for the Texas Instruments SDZ (R-PZIP-T16) Ceramic Zig Zag package
35 # That drawing shows the pin width varying from 0.45mm to 0.65mm
36 # (18 to 26 mils) and the width in the other dimension from .23mm
37 # to .35mm. The cross section is rectangular. This gives a diagonal
38 # from 0.505mm (19.9 mil) to 0.738mm (29 mil).
46 `define(`MAXY', `eval(`$4' / 2 * 100 + 50)')
47 Element(0x00 "$1" "`$2'" "$3" 275 50 3 100 0x00)
49 forloop(`i', 1, eval($4 / 2),
50 `PIN(50, eval(100*(i-1)+50), 60, 35, eval(2*i-1))
51 PIN(150, eval(100*(i-1)+100), 60, 35, eval(2*i))
54 ElementLine(0 0 0 MAXY 20)
55 ElementLine(0 MAXY 200 MAXY 20)
56 ElementLine(200 MAXY 200 0 20)
57 ElementLine(200 0 0 0 20)
58 ElementLine(100 0 100 100 10)
59 ElementLine(100 100 0 100 10)
64 # -------------------------------------------------------------------
65 # the definition of a plastic power package vertical
66 # for TO220 (2-7pins), TO251, TOP3, MULTIWATT(8-15pins)
67 # based on 'old style format' by Olaf Kaluza (olaf@criseis.ruhr.de)
73 # $6: body length (dimension parallel to rows of pins)
74 # $7: body width (dimension perpendicular to rows of pins)
78 # $11: pin row spacing
80 define(`GENERIC_PL_POWER',
81 `define(`pin1X', `eval((`$6' - (`$4' - 1) * `$5')/2)')
82 Element(0x00 "$1" "`$2'" "$3" eval(`$6'+60) 50 3 100 0x00)
85 `PIN(eval(pin1X + (i-1)*`$5'), ifelse(eval(i % 2 == 0), 0, eval(`$8'+`$11'), `$8'), `$9', `$10', i)
87 ElementLine(0 0 0 `$7' 20)
88 ElementLine(0 `$7' `$6' `$7' 20)
89 ElementLine(`$6' `$7' `$6' 0 20)
90 ElementLine(`$6' 0 0 0 20)
91 ElementLine(0 50 `$6' 50 10)
92 ElementLine(eval(`$6'/2 - 75) 0 eval(`$6'/2 - 75) 50 10)
93 ElementLine(eval(`$6'/2 + 75) 0 eval(`$6'/2 + 75) 50 10)
94 Mark(pin1X eval(`$7'+`$10'))
97 # -------------------------------------------------------------------
98 # the definition of a resistor (0.25W) package
103 `Element(0x00 "$1" "`$2'" "$3" 120 30 0 100 0x00)
105 PIN(0, 50, 68, 38, 1)
106 PIN(400, 50, 68, 38, 2)
107 ElementLine(100 0 300 0 20)
108 ElementLine(300 0 300 100 20)
109 ElementLine(300 100 100 100 20)
110 ElementLine(100 100 100 0 20)
111 ElementLine(0 50 100 50 20)
112 ElementLine(300 50 400 50 20)
116 # -------------------------------------------------------------------
117 # the definition of a SIL package without a common pin
123 `define(`MAXY', `eval(`$4' * 100 -50)')
124 Element(0x00 "$1" "`$2'" "$3" 160 10 3 100 0x00)
127 `PIN(50, eval(i * 100 -50), 60, 28, i)
129 ElementLine( 0 50 0 MAXY 20)
130 ElementLine(100 50 100 MAXY 20)
131 ElementArc(50 50 50 50 180 180 20)
132 ElementArc(50 MAXY 50 50 0 180 20)
133 forloop(`i', 1, eval($4 - 1),
134 `ElementLine(0 eval(i * 200) 100 eval(i * 200) 10)
139 # -------------------------------------------------------------------
140 # the definition of a SIL package with a common pin
146 `define(`MAXY', `eval(`$4' * 100 -50)')
147 Element(0x00 "$1" "`$2'" "$3" 160 10 3 100 0x00)
150 `PIN(50, eval(i * 100 -50), 60, 28, i)
152 ElementLine( 0 50 0 MAXY 20)
153 ElementLine(100 50 100 MAXY 20)
154 ElementLine( 0 100 100 100 10)
155 ElementArc(50 50 50 50 180 180 20)
156 ElementArc(50 MAXY 50 50 0 180 20)
160 # -------------------------------------------------------------------
161 # a QFP-132 pin flat pack
167 # based on mail by Volker Bosch (bosch@iema.e-technik.uni-stuttgart.de)
169 `Element(0x00 "$1" "`$2'" "$3" 250 200 0 150 0x00)
172 `define(`XPOS', eval(625 -i*25))'
173 `PAD(XPOS, 40, XPOS, 90, 15, i)
176 `define(`XPOS', eval(1025 -i*25))'
177 `PAD(XPOS, 40, XPOS, 90, 15, eval(i+116))
180 `define(`YPOS', eval(175 +i*25))'
181 `PAD(30, YPOS, 80, YPOS, 15, i)
184 `define(`XPOS', eval(175 +i*25))'
185 `PAD(XPOS, 1160, XPOS, 1110, 15, eval(i+50))
188 `define(`YPOS', eval(1025 -i*25))'
189 `PAD(1120, YPOS, 1170, YPOS, 15, i)
193 ElementArc(600 150 10 10 0 360 5)
195 # Nase links oben (PIN 17/18)
196 ElementLine( 125 175 75 150 20)
197 ElementLine( 75 150 75 125 20)
198 ElementLine( 75 125 125 75 20)
199 ElementLine( 125 75 150 75 20)
200 ElementLine( 150 75 175 125 20)
202 # Verbindungsline zur Ecke rechts oben
203 ElementLine( 175 125 1025 125 20)
205 # Nase rechts oben (PIN 116/117)
206 ElementLine(1025 125 1050 75 20)
207 ElementLine(1050 75 1075 75 20)
208 ElementLine(1075 75 1125 125 20)
209 ElementLine(1125 125 1125 150 20)
210 ElementLine(1125 150 1075 175 20)
212 # Verbindungsline zur Ecke rechts unten
213 ElementLine(1075 175 1075 1025 20)
215 # Nase rechts unten (PIN 83/84)
216 ElementLine(1075 1025 1125 1050 20)
217 ElementLine(1125 1050 1125 1075 20)
218 ElementLine(1125 1075 1075 1125 20)
219 ElementLine(1075 1125 1050 1125 20)
220 ElementLine(1050 1125 1025 1075 20)
222 # Verbindungsline zur Ecke links unten
223 ElementLine(1025 1075 175 1075 20)
225 # Nase links unten (PIN 50/51)
226 ElementLine( 175 1075 150 1125 20)
227 ElementLine( 150 1125 125 1125 20)
228 ElementLine( 125 1125 75 1075 20)
229 ElementLine( 75 1075 75 1050 20)
230 ElementLine( 75 1050 125 1025 20)
232 # Verbindungsline zur Ecke links oben
233 ElementLine( 125 1025 125 175 20)
235 # Markierung so anordnen, dass Pinanchse im 25-MIL-Raster zu liegen kommt
239 # -------------------------------------------------------------------
248 # based on mail by Volker Bosch (bosch@iema.e-technik.uni-stuttgart.de)
250 `define(`RADIUS1', `eval(`$4' /2)')
251 define(`RADIUS2', `eval(`$4' /2 +20)')
252 Element(0x00 "$1" "`$2'" "$3" 100 70 0 100 0x00)
254 # typical LED is 0.5 mm or 0.020" square pin. See for example
255 # http://www.lumex.com and part number SSL-LX3054LGD.
256 # 0.020" square is 0.0288" diagonal. A number 57 drill is
257 # 0.043" which should be enough. a 65 mil pad gives 11 mils
260 PIN(-50, 0, 65, 43, 1)
261 PIN(50, 0, 65, 43, 2)
262 ifelse( eval(RADIUS1 - 10 > 85), 1,
263 ElementArc(0 0 RADIUS1 RADIUS1 0 360 10)
265 ElementArc(0 0 RADIUS1 RADIUS1 45 90 10)
266 ElementArc(0 0 RADIUS1 RADIUS1 225 90 10)
268 ifelse( eval(RADIUS2 - 10 > 85), 1,
269 ElementArc(0 0 RADIUS2 RADIUS2 0 360 10)
271 ElementArc(0 0 RADIUS2 RADIUS2 45 90 10)
272 ElementArc(0 0 RADIUS2 RADIUS2 225 90 10)
277 # -------------------------------------------------------------------
284 # $4: distance in mil
286 define(`PKG_DIODE_LAY',
287 `define(`X1', `eval(`$4' /3)')
288 define(`X2', `eval(`$4' -X1)')
289 define(`Y', `eval(`$4' /2)')
290 define(`DELTA', `eval(X1 /2)')
291 define(`PINSIZE', `ifelse(eval($4 >= 500), 1, 80, 50)')
292 define(`DRILLSIZE', `ifelse(eval($4 >= 500), 1, 50, 30)')
293 Element(0x00 "$1" "`$2'" "$3" eval(X2+20) eval(Y-DELTA) 0 100 0x00)
295 PIN(0, Y, PINSIZE, DRILLSIZE, 1)
296 PIN($4, Y, PINSIZE, DRILLSIZE, 2)
298 ElementLine(0 Y X1 Y 10)
299 ElementLine(X2 Y $4 Y 10)
301 ElementLine(X1 Y X2 eval(Y-DELTA) 10)
302 ElementLine(X2 eval(Y-DELTA) X2 eval(Y+DELTA) 10)
303 ElementLine(X2 eval(Y+DELTA) X1 Y 10)
304 ElementLine(X1 eval(Y-DELTA) X1 eval(Y+DELTA) 10)
308 # -------------------------------------------------------------------
309 # the definition of a general axial package
313 # $4: distance in mil
314 # $5: 1 for polarized, 0 for non polarized
315 define(`PKG_AXIAL_LAY',
316 `define(`X1', `eval(`$4' /4)')
317 define(`X2', `eval(`$4' -X1)')
318 define(`Y1', `eval(X1 /3)')
319 define(`Y2', `eval(Y1 *2)')
320 define(`PINSIZE', `ifelse(eval($4 >= 600), 1, 80, 55)')
321 define(`DRILLSIZE', `ifelse(eval($4 >= 600), 1, 50, 30)')
322 define(`YPT', `eval(Y1 - PINSIZE/2 - 10)')
323 define(`YPC', `eval(YPT - 20)')
324 define(`YPB', `eval(YPT - 40)')
325 Element(0x00 "$1" "`$2'" "$3" eval(X2+20) eval(Y2+20) 0 100 0x00)
327 PIN(0, Y1, PINSIZE, DRILLSIZE, 1)
328 PIN($4, Y1, PINSIZE, DRILLSIZE, 2)
330 ElementLine(0 Y1 X1 Y1 10)
331 ElementLine(X2 Y1 $4 Y1 10)
333 ElementLine(X1 0 X2 0 10)
334 ElementLine(X2 0 X2 Y2 10)
335 ElementLine(X2 Y2 X1 Y2 10)
336 ElementLine(X1 Y2 X1 0 10)
339 ElementLine(0 YPB 0 YPT 10)
340 ElementLine(-20 YPC 20 YPC 10)
341 ElementLine(`eval($4 - 20)' YPC `eval($4 + 20)' YPC 10)
344 # ElementArc(X1 Y 50 50 270 180 10)
345 # ElementArc(X2 Y 50 50 90 180 10)
350 # -------------------------------------------------------------------
352 # general purpose crystal standing, 2 or 3 pins
356 # $4: pin spacing in mil
357 # $5: length of component in mil
358 # $6: width of component in mil
359 # $7: diametr of pad in mil
360 # $8: diametr of drill in mil
363 define(`PKG_CRYSTAL_V',
364 `define(`spacing', `$4')
368 define(`drill', `$8')
369 define(`centerY', `eval(sizY / 2)')
370 define(`pinX', `eval((sizX - spacing * (`$9'-1)) /2)')
372 Element(0x00 "$1" "$2" "$3" 0 eval(0 - 60) 0 100 0x00)
374 PIN(pinX, centerY, pad, drill, 1)
375 PIN(eval(pinX + spacing), centerY, pad, drill, 2)
376 ifelse(eval(`$9' == 3), 1,
377 PIN(eval(pinX + 2 * spacing), centerY, pad, drill, 3))
379 ElementLine(centerY 0 eval(sizX-centerY) 0 20)
380 ElementArc(eval(sizX-centerY) centerY centerY centerY 90 180 20)
381 ElementLine(eval(sizX-centerY) sizY centerY sizY 20)
382 ElementArc(centerY centerY centerY centerY 270 180 20)
388 # general purpose crystal laying, 2 or 3 pins
392 # $4: pin spacing in mil
393 # $5: length of component in mil
394 # $6: height of component in mil
395 # $7: diametr of pad in mil
396 # $8: diametr of drill in mil
399 define(`PKG_CRYSTAL_H',
400 `define(`base', `$4')
404 define(`drill', `$8')
405 define(`pinX', `eval((sizX - base * (`$9'-1)) /2)')
406 define(`pinY', `ifelse(eval(sizX > 500),1,eval(sizY+200),eval(sizY+100))')
407 define(`maxY', `eval(sizY + offset)')
409 Element(0x00 "$1" "$2" "$3" 0 eval(0 - 60) 0 100 0x00)
411 PIN(pinX, pinY, pad, drill, 1)
412 PIN(eval(pinX + base), pinY, pad, drill, 2)
413 ifelse(eval(`$9' == 3), 1,
414 PIN(eval(pinX + 2 * base), pinY, pad, drill, 3))
416 ElementLine(0 0 sizX 0 20)
417 ElementLine(sizX 0 sizX sizY 20)
418 ElementLine(sizX sizY 0 sizY 20)
419 ElementLine(0 sizY 0 0 20)
424 # a crystal package for backward compatibility
429 # $4: package width in MIL
431 define(`PKG_CRYSTAL',`PKG_CRYSTAL_V(`$1',`$2',`$3',`eval($4-100)',`$4',`100',`60',`28',`2')')
434 # -------------------------------------------------------------------
435 # a can oscillator package
442 `Element(0x00 "$1" "`$2'" "$3" 270 300 3 100 0x00)
444 Pin(100 100 50 28 "NC" 0x01)
445 Pin(100 700 50 28 "GND" 0x01)
446 Pin(400 700 50 28 "CLK" 0x01)
447 Pin(400 100 50 28 "VCC" 0x01)
449 ElementLine(5 5 400 5 10)
450 ElementArc(400 100 95 95 180 90 10)
451 ElementLine(495 100 495 700 10)
452 ElementArc(400 700 95 95 90 90 10)
453 ElementLine(400 795 100 795 10)
454 ElementArc(100 700 95 95 0 90 10)
455 ElementLine(5 700 5 5 10)
457 ElementLine(100 60 400 60 10)
458 ElementArc(400 100 40 40 180 90 10)
459 ElementLine(440 100 440 700 10)
460 ElementArc(400 700 40 40 90 90 10)
461 ElementLine(400 740 100 740 10)
462 ElementArc(100 700 40 40 0 90 10)
463 ElementLine(60 700 60 100 10)
464 ElementArc(100 100 40 40 270 90 10)
469 # -------------------------------------------------------------------
470 # 8 bit ISA Slot card
472 # Volker Bosch (bosch@iema.e-technik.uni-stuttgart.de), 12/95
479 `Element(0x00 "$1" "`$2'" "$3" 4000 0 0 100 0x00)
481 # Pins, entspr. Anschl. auf Loetseite (b31..b1)
482 Pin( 200 3850 60 35 "Gnd (b31)" 0x01)
483 Pin( 300 3850 60 35 "Osc" 0x01)
484 Pin( 400 3850 60 35 "+5V" 0x01)
485 Pin( 500 3850 60 35 "BALE" 0x01)
486 Pin( 600 3850 60 35 "TC" 0x01)
487 Pin( 700 3850 60 35 "/DAck2" 0x01)
488 Pin( 800 3850 60 35 "IRq3" 0x01)
489 Pin( 900 3850 60 35 "IRq4" 0x01)
490 Pin(1000 3850 60 35 "IRq5" 0x01)
491 Pin(1100 3850 60 35 "IRq6" 0x01)
492 Pin(1200 3850 60 35 "IRq7" 0x01)
493 Pin(1300 3850 60 35 "Clock" 0x01)
494 Pin(1400 3850 60 35 "/Ref" 0x01)
495 Pin(1500 3850 60 35 "DRq1" 0x01)
496 Pin(1600 3850 60 35 "/DAck1" 0x01)
497 Pin(1700 3850 60 35 "DRq3" 0x01)
498 Pin(1800 3850 60 35 "/DAck3" 0x01)
499 Pin(1900 3850 60 35 "/IOR" 0x01)
500 Pin(2000 3850 60 35 "/IOW" 0x01)
501 Pin(2100 3850 60 35 "/SMEMR" 0x01)
502 Pin(2200 3850 60 35 "/SMEMW" 0x01)
503 Pin(2300 3850 60 35 "Gnd" 0x01)
504 Pin(2400 3850 60 35 "+12V" 0x01)
505 Pin(2500 3850 60 35 "/0WS" 0x01)
506 Pin(2600 3850 60 35 "-12V" 0x01)
507 Pin(2700 3850 60 35 "DRq2" 0x01)
508 Pin(2800 3850 60 35 "-5V" 0x01)
509 Pin(2900 3850 60 35 "IEQ2" 0x01)
510 Pin(3000 3850 60 35 "+5V" 0x01)
511 Pin(3100 3850 60 35 "ResDrv" 0x01)
512 Pin(3200 3850 60 35 "Gnd (b1)" 0x01)
514 # Pins, entspr. Anschl. auf Bestueckseite
515 Pin( 200 3950 60 35 "SA0 (a31)" 0x01)
516 Pin( 300 3950 60 35 "SA1" 0x01)
517 Pin( 400 3950 60 35 "SA2" 0x01)
518 Pin( 500 3950 60 35 "SA3" 0x01)
519 Pin( 600 3950 60 35 "SA4" 0x01)
520 Pin( 700 3950 60 35 "SA5" 0x01)
521 Pin( 800 3950 60 35 "SA6" 0x01)
522 Pin( 900 3950 60 35 "SA7" 0x01)
523 Pin(1000 3950 60 35 "SA8" 0x01)
524 Pin(1100 3950 60 35 "SA9" 0x01)
525 Pin(1200 3950 60 35 "SA10" 0x01)
526 Pin(1300 3950 60 35 "SA11" 0x01)
527 Pin(1400 3950 60 35 "SA12" 0x01)
528 Pin(1500 3950 60 35 "SA13" 0x01)
529 Pin(1600 3950 60 35 "SA14" 0x01)
530 Pin(1700 3950 60 35 "SA15" 0x01)
531 Pin(1800 3950 60 35 "SA16" 0x01)
532 Pin(1900 3950 60 35 "SA17" 0x01)
533 Pin(2000 3950 60 35 "SA18" 0x01)
534 Pin(2100 3950 60 35 "SA19" 0x01)
535 Pin(2200 3950 60 35 "AEN" 0x01)
536 Pin(2300 3950 60 35 "IOChRdy" 0x01)
537 Pin(2400 3950 60 35 "SD0" 0x01)
538 Pin(2500 3950 60 35 "SD1" 0x01)
539 Pin(2600 3950 60 35 "SD2" 0x01)
540 Pin(2700 3950 60 35 "SD3" 0x01)
541 Pin(2800 3950 60 35 "SD4" 0x01)
542 Pin(2900 3950 60 35 "SD5" 0x01)
543 Pin(3000 3950 60 35 "SD6" 0x01)
544 Pin(3100 3950 60 35 "SD7" 0x01)
545 Pin(3200 3950 60 35 "/IOChCk (a1)" 0x01)
548 ElementLine( 0 100 100 100 2)
549 ElementLine( 100 0 100 100 2)
550 ElementLine( 100 100 4250 100 5)
551 ElementLine(4250 100 4250 3810 5)
552 ElementLine(4250 3810 3620 3810 5)
553 ElementLine(3620 3810 3620 3510 5)
554 ElementLine(3620 3510 3300 3510 5)
555 ElementLine(3300 3510 3300 3810 5)
556 ElementLine(3300 3810 100 3810 5)
557 ElementLine( 100 3810 100 3510 5)
558 ElementLine( 100 3510 0 3510 2)
560 # Markierung == Pin B1
564 # -------------------------------------------------------------------
565 # an ovenized-oscillator package
570 # Text(620 320 0 100 "GROUND" 0x0001)
571 # Text(620 520 0 100 "VECTRON LABORATORIES, INC." 0x0001)
572 # Text(620 720 0 100 "CO711 SERIES OSC" 0x0001)
573 # Text(620 920 0 100 "711-04-006" 0x0001)
574 # Text(620 1680 0 100 "+12 -> 15 VOLTS DC" 0x0001)
575 define(`PKG_OVEN_OSC',
576 `Element(0x00 "$1" "`$2'" "$3" 580 280 0 100 0x00)
578 Pin(320 320 150 35 "NC" 0x01)
579 Pin(320 1000 150 35 "VCC" 0x01)
580 Pin(320 1680 150 35 "CLK" 0x01)
581 Pin(1680 320 150 35 "+12V" 0x01)
582 Pin(1680 1680 150 35 "GND" 0x01)
584 ElementLine(2020 1125 2020 875 10)
585 ElementLine(2100 875 2020 875 10)
586 ElementLine(2100 975 2100 875 10)
587 ElementLine(2075 975 2100 975 10)
588 ElementLine(2075 1025 2075 975 10)
589 ElementLine(2100 1025 2075 1025 10)
590 ElementLine(2100 1125 2100 1025 10)
591 ElementLine(2100 1125 2020 1125 10)
593 ElementLine(2000 320 2000 1680 10)
594 ElementLine(320 0 1680 0 10)
595 ElementLine(0 1680 0 320 10)
596 ElementLine(1680 2000 320 2000 10)
598 ElementArc(320 320 320 320 270 90 10)
599 ElementArc(320 1680 320 320 0 90 10)
600 ElementArc(1680 320 320 320 180 90 10)
601 ElementArc(1680 1680 320 320 90 90 10)
606 # a radial capacitor package
611 # $4: package width in MIL
612 # $5: set to 1 if a polarized part
613 define(`PKG_RADIAL_CAN',
614 `define(`X1', `eval(`$4' /4)')
615 define(`X2', `eval(`$4' -X1)')
616 define(`X3', `eval(`$4' /2)')
617 define(`Y', `eval(`$4' /2)')
618 define(`R', `eval(`$4' /2)')
619 define(`PINSIZE', `ifelse(eval($4 >= 600), 1, 80, 55)')
620 define(`DRILLSIZE', `ifelse(eval($4 >= 600), 1, 50, 30)')
621 Element(0x00 "$1" "`$2'" "$3" eval(`$4') 0 0 100 0x00)
623 PIN(X1, Y, 60, DRILLSIZE, 1)
624 PIN(X2, Y, 60, DRILLSIZE, 2)
625 ElementArc(X3 Y R R 0 360 10)
628 ElementLine(-60 Y -20 Y 10)
629 ElementLine(-40 `eval(Y-20)' -40 `eval(Y+20)' 10)
630 ElementLine(`eval($4 + 20)' Y `eval($4 + 60)' Y 10)
636 # a core surface mount package
637 # 12/99 Larry Doolittle <LRDoolittle@lbl.gov>
642 # $4: device length in MIL
643 # $5: device width in MIL
645 # Note that the pad width, length, and separation are derived from
646 # the given device dimensions. I <LRDoolittle@lbl.gov> don't
647 # claim to have followed any industry standards here, these sizes
648 # are based on someone else's measurements:
649 # 0603 is 30x40 mil pads on 60 mil pad ctr
650 # 0805 is 44x60 mil pads on 80 mil pad ctr
651 # on a PC motherboard. If you know the "real" values, please educate
652 # me and/or adjust this code.
654 define(`PKG_SMD_BASE',
655 `define(`T', `eval(`$4'/4+`$5'/2)')
656 define(`W', `eval(T/2+15)')
660 define(`Y1', `eval(Y-(`$5'-T)/2-5)')
661 define(`Y2', `eval(Y+(`$5'-T)/2+5)')
662 # Silkscreen box coordinates
663 define(`X1L', `eval(X1-W)')
664 define(`X2L', `eval(X2+W)')
665 define(`Y1L', `eval(Y1-W)')
666 define(`Y2L', `eval(Y2+W)')
667 Element(0x00 "$1" "`$2'" "$3" eval(10+T/2) eval(Y2L+15) 0 100 0x00)
669 # PAD(X1, Y1, X1, Y2, T, 1)
670 # PAD(X2, Y1, X2, Y2, T, 2)
671 # Use Pad instead of PAD so both pads come out square
672 Pad(X1 Y1 X1 Y2 T "1" 0x100)
673 Pad(X2 Y1 X2 Y2 T "2" 0x100)
674 ElementLine(X1L Y1L X1L Y2L 8)
675 ElementLine(X1L Y2L X2L Y2L 8)
676 ElementLine(X2L Y2L X2L Y1L 8)
677 ElementLine(X2L Y1L X1L Y1L 8)
681 define(`PKG_SMD_SIMPLE',
682 `define(`SMD_OUTLINE_EXTRA', `')
683 PKG_SMD_BASE(`$1', `$2', `$3', `$4', `$5')
686 define(`PKG_SMD_DIODE',
687 `define(`SMD_OUTLINE_EXTRA',
689 define(`XBAR', `eval(X1L+10)')
690 ElementLine( XBAR Y1L XBAR Y2L 8 )
692 PKG_SMD_BASE(`$1', `$2', `$3', `$4', `$5')
695 define(`PKG_SMD_POLAR',
696 `define(`SMD_OUTLINE_EXTRA',
699 # ElementLine( X1 eval(Y2L+20) X1 eval(Y2L+70) 8)
700 # ElementLine( eval(X1-25) eval(Y2L+45) eval(X1+25) eval(Y2L+45) 8)
701 define(`XBAR', `eval(X1L+10)')
702 ElementLine( XBAR Y1L XBAR Y2L 8 )
705 PKG_SMD_BASE(`$1', `$2', `$3', `$4', `$5')
708 # a smd chip package, capacitor or resistor
713 # $4: package designator length in MIL *100 + width in MIL /10
714 # ie 402 == 40 X 20; 603 == 60 X 30
716 define(`PKG_SMD_CHIP',
717 `define(`X1', `eval(eval(`$4' /100)*10)')
718 define(`Y1', `eval(eval(`$4'- X1 *10) *10)')
719 # line radius (LR) depicts offset to pads lines and pad "band width"
720 define(`LR', `ifelse(eval(Y1 < 40), 1, eval(Y1/4), 10)')
721 Element(0x00 "$1" "`$2'" "$3" 0 0 0 25 0x00)
723 PAD(LR LR LR eval(Y1-LR) eval(LR*2) )
724 PAD(eval(X1-LR) LR eval(X1-LR) eval(Y1-LR) eval(LR*2) )
726 ElementLine( 0 0 X1 0 5)
727 ElementLine(X1 0 X1 Y1 5)
728 ElementLine(X1 Y1 0 Y1 5)
729 ElementLine( 0 Y1 0 0 5)
731 Mark(eval(X1/2) eval(Y1/2))