Free some global variables and settings.
[geda-pcb/pcjc2.git] / lib / misc.inc
blob0b0518f1934354e71a65b127d46ad3e3ec2691fc
1 .#
2 #                             COPYRIGHT
3
4 #   PCB, interactive printed circuit board design
5 #   Copyright (C) 1994,1995,1996 Thomas Nau
6
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.
11
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.
16
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.
20
21 #   Contact addresses for paper mail and Email:
22 #   Thomas Nau, Schlehenweg 15, 88471 Baustetten, Germany
23 #   Thomas.Nau@rz.uni-ulm.de
24
26 # misc packages
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).
40 # $1: canonical name
41 # $2: name on PCB
42 # $3: value
43 # $4: number of pins
45 define(`PKG_SD',
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))
52         ')
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)
61         Mark(50 50)
62 )')
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)
68 # $1: canonical name
69 # $2: name on PCB
70 # $3: value
71 # $4: pin count
72 # $5: pin spacing
73 # $6: body length (dimension parallel to rows of pins)
74 # $7: body width  (dimension perpendicular to rows of pins)
75 # $8: pin/tab spacing
76 # $9: pad size
77 # $10: drill size
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)
84        forloop(`i', 1, `$4',
85                `PIN(eval(pin1X + (i-1)*`$5'), ifelse(eval(i % 2 == 0), 0, eval(`$8'+`$11'), `$8'), `$9', `$10', i)
86        ')
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'))
95  )')
97 # -------------------------------------------------------------------
98 # the definition of a resistor (0.25W) package
99 # $1: canonical name
100 # $2: name on PCB
101 # $3: value
102 define(`PKG_R025',
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)
113         Mark(0 50)
116 # -------------------------------------------------------------------
117 # the definition of a SIL package without a common pin
118 # $1: canonical name
119 # $2: name on PCB
120 # $3: value
121 # $4: number of pins
122 define(`PKG_SIL',
123         `define(`MAXY', `eval(`$4' * 100 -50)')
124 Element(0x00 "$1" "`$2'" "$3" 160 10 3 100 0x00)
126         forloop(`i', 1, $4,
127                 `PIN(50, eval(i * 100 -50), 60, 28, i)
128         ')
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)
135         ')
136         Mark(50 50)
139 # -------------------------------------------------------------------
140 # the definition of a SIL package with a common pin
141 # $1: canonical name
142 # $2: name on PCB
143 # $3: value
144 # $4: number of pins
145 define(`PKG_CSIL',
146         `define(`MAXY', `eval(`$4' * 100 -50)')
147 Element(0x00 "$1" "`$2'" "$3" 160 10 3 100 0x00)
149         forloop(`i', 1, $4,
150                 `PIN(50, eval(i * 100 -50), 60, 28, i)
151         ')
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)
157         Mark(50 50)
160 # -------------------------------------------------------------------
161 # a QFP-132 pin flat pack
163 # $1: canonical name
164 # $2: name on PCB
165 # $3: value
167 # based on mail by Volker Bosch (bosch@iema.e-technik.uni-stuttgart.de)
168 define(`PKG_QFP132',
169 `Element(0x00 "$1" "`$2'" "$3" 250 200 0 150 0x00)
171         forloop(`i', 1, 17,
172                 `define(`XPOS', eval(625 -i*25))'
173                 `PAD(XPOS, 40, XPOS, 90, 15, i)
174         ')
175         forloop(`i', 1, 16,
176                 `define(`XPOS', eval(1025 -i*25))'
177                 `PAD(XPOS, 40, XPOS, 90, 15, eval(i+116))
178         ')
179         forloop(`i', 1, 33,
180                 `define(`YPOS', eval(175 +i*25))'
181                 `PAD(30, YPOS, 80, YPOS, 15, i)
182         ')
183         forloop(`i', 1, 33,
184                 `define(`XPOS', eval(175 +i*25))'
185                 `PAD(XPOS, 1160, XPOS, 1110, 15, eval(i+50))
186         ')
187         forloop(`i', 1, 33,
188                 `define(`YPOS', eval(1025 -i*25))'
189                 `PAD(1120, YPOS, 1170, YPOS, 15, i)
190         ')
192         # Markierung pin 1
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
236         Mark(200 200)
239 # -------------------------------------------------------------------
240 # LED
241 # Pin 1 is -, 2 is +
243 # $1: canonical name
244 # $2: name on PCB
245 # $3: value
246 # $4: diameter
248 # based on mail by Volker Bosch (bosch@iema.e-technik.uni-stuttgart.de)
249 define(`PKG_LED',
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
258 # of annular ring.
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)
274         Mark(0 0)
277 # -------------------------------------------------------------------
278 # diodes
279 # Pin 1 is K, 2 is A
281 # $1: canonical name
282 # $2: name on PCB
283 # $3: value
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)
305         Mark(0 Y)
308 # -------------------------------------------------------------------
309 # the definition of a general axial package
310 # $1: canonical name
311 # $2: name on PCB
312 # $3: value
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)
338         ifelse(1, $5,
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)
342         )
344 #       ElementArc(X1 Y 50 50 270 180 10)
345 #       ElementArc(X2 Y 50 50 90 180 10)
347         Mark(0 Y1)
350 # -------------------------------------------------------------------
352 # general purpose crystal standing, 2 or 3 pins
353 # $1: canonical name
354 # $2: name on PCB
355 # $3: value
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
361 # $9: number of pins
363 define(`PKG_CRYSTAL_V',
364        `define(`spacing',  `$4')
365         define(`sizX',     `$5')
366         define(`sizY',     `$6')
367         define(`pad',      `$7')
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)
384         Mark(pinX centerY)
388 # general purpose crystal laying, 2 or 3 pins
389 # $1: canonical name
390 # $2: name on PCB
391 # $3: value
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
397 # $9: number of pins
399 define(`PKG_CRYSTAL_H',
400        `define(`base',     `$4')
401         define(`sizX',     `$5')
402         define(`sizY',     `$6')
403         define(`pad',      `$7')
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)
421         Mark(pinX pinY)
424 # a crystal package for backward compatibility
426 # $1: canonical name
427 # $2: name on PCB
428 # $3: value
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
437 # $1: canonical name
438 # $2: name on PCB
439 # $3: value
441 define(`PKG_OSC',
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)
466         Mark(100 100)
469 # -------------------------------------------------------------------
470 # 8 bit ISA Slot card
472 # Volker Bosch (bosch@iema.e-technik.uni-stuttgart.de), 12/95
474 # $1: canonical name
475 # $2: name on PCB
476 # $3: value
478 define(`PKG_ISA8',
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)
547       # Umrahmung
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
561         Mark(3200 3850)
564 # -------------------------------------------------------------------
565 # an ovenized-oscillator package
567 # $1: canonical name
568 # $2: name on PCB
569 # $3: value
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)
603         Mark(320 320)
606 # a radial capacitor package
608 # $1: canonical name
609 # $2: name on PCB
610 # $3: value
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)
627         ifelse( 1, $5,
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)
631         )
633         Mark (X1 Y)
636 # a core surface mount package
637 # 12/99 Larry Doolittle <LRDoolittle@lbl.gov>
639 # $1: canonical name
640 # $2: name on PCB
641 # $3: value
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)')
657         define(`X1', `0')
658         define(`X2',  ``$4'')
659         define(`Y',  `0')
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)
678         SMD_OUTLINE_EXTRA
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',
688                 `
689                 define(`XBAR', `eval(X1L+10)')
690                 ElementLine( XBAR Y1L XBAR Y2L 8 )
691         ')
692         PKG_SMD_BASE(`$1', `$2', `$3', `$4', `$5')
695 define(`PKG_SMD_POLAR',
696         `define(`SMD_OUTLINE_EXTRA',
697                 `
698                 # crude plus sign
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 )
704         ')
705         PKG_SMD_BASE(`$1', `$2', `$3', `$4', `$5')
708 # a smd chip package, capacitor or resistor
710 # $1: canonical name
711 # $2: name on PCB
712 # $3: value
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))