Update "missing" (automake) script to a later version
[geda-pcb/pcjc2.git] / lib / pci.inc
blob23d9189f3f2838dc8a372b911ee40dd2454621b5
1 # Definitions for PCI boards
2 # by D.J. Barrow dj_barrow@ariasoft.ie
4 # please note that you will need to edit the saved pcb file
5 # by hand to move the board outline onto a seperate layer
6 # I suggest one of the unused layers.
8 define(`GETNUMARRAYS',`eval(($#)/2)')
9 # $1: canonical name
10 # $2: name on PCB
11 # $3: boardheight,number of pins,arcradius,..., number of pins
12 define(`PKG_PCIPINARRAY',
13         `
14         define(`cnt',`1')
15         define(`ARGS',`$4, $5, $6, $7')
16         args(ARGS)
17         define(`LEFTOFFSET',`100')
18         define(`EDGEGAP',`12')
19         define(`PINDIST',`50')
20         define(`PINWIDTH',`25')
21         define(`NUMARRAYS',`GETNUMARRAYS(ARGS)')
22         define(`TOTALPINS1',forloop(`IDX',0,eval(NUMARRAYS-1),
23                 ``arg'eval((IDX*2)+2) + ')0)
24         define(`TOTALPINS',eval(TOTALPINS1))
25         ifelse(1,eval(NUMARRAYS>1),`
26                 define(`TOTALDIAMETER1',forloop(`IDX',0,eval(NUMARRAYS-2),
27                         ``arg'eval((IDX*2)+3) + ')0)
28                 define(`TOTALDIAMETER',eval(TOTALDIAMETER1))
29         ')
30         define(`PINCENTER',`eval(LEFTOFFSET+(PINDIST/2))')
31         define(`PINRADIUS',`eval(PINWIDTH/2)')
32         define(`PINLEFT',`eval(PINCENTER-PINRADIUS)')
33         define(`PINRIGHT',`eval(PINCENTER+PINRADIUS)')
34         define(`PENWIDTH',`eval(PINRADIUS+4)')
35         define(`PENRADIUS',`eval(PENWIDTH/2)')
36         define(`MAXIDX',`eval(TOTALPINS - 1)')
37         define(`ARRAYWIDTH', `eval((TOTALPINS*PINDIST)+TOTALDIAMETER)')
38         define(`CENTERX', `eval(((ARRAYWIDTH+LEFTOFFSET)/2))')
39         define(`MINY',`20')
40         define(`MIDY',`220')
41         define(`MAXY',`270')
42         define(`ARCRADIUS',`12')
43         define(`ARCDIAMETER',`eval(ARCRADIUS*2)')
44         define(`LMAXY',`eval(MAXY+ARCRADIUS)')
45         define(`BOARDTOP',`eval(LMAXY-arg1)')
46         define(`SCREWBORDER',275)
47 Element(0x00  "$1" "`$2'" "$3" CENTERX 10 1 30 0x00)
49         Mark(CENTERX 135)
50         define(`ADDSIDE',0)
51         define(`FLAG',0x0)
52         define(`LOOPIDX1',eval(NUMARRAYS-1))
53         define(`LEFT1',`eval(PINLEFT-ARCRADIUS)')
54         define(`ARCRADIUS2',`100')
55         define(`SLOTWIDTH',`1000')
56         define(`BRACKETLEFT',`-1525')
57         define(`LEFT2',`eval(LEFT1-ARCRADIUS2)')
58         define(`LEFT3',`eval(LEFT1+ARCRADIUS2-SLOTWIDTH)')
59         define(`LEFT4',`eval(LEFT1-SLOTWIDTH)')
60         ElementArc(LEFT2 0 ARCRADIUS2 ARCRADIUS2 180 90 1)
61         ElementLine(LEFT2 -ARCRADIUS2 LEFT3 -ARCRADIUS2 1)
62         ElementArc(LEFT3 0 ARCRADIUS2 ARCRADIUS2 270 90 1)
63         ElementLine(LEFT4 0 LEFT4 MAXY 1)
64         define(`LEFT5',`eval(LEFT4-ARCRADIUS)')
65         ElementArc(LEFT5 MAXY ARCRADIUS ARCRADIUS 90 90 1)
66         ElementLine(LEFT5 LMAXY BRACKETLEFT LMAXY 1)
67         forloop(`SIDE',0,1,
68         `
69                 define(`IDX',`0')
70                 define(`ADDDIAMETER',`0')
71                 forloop(`IDX1',0,LOOPIDX1,
72                 `
73                         define(`CURRNUMPINS',`arg'eval((IDX1*2)+2))
74                         ifelse(SIDE,`0',`
75                                 define(`CURRLEFT',`eval((PINDIST*IDX)+(ADDDIAMETER)+PINLEFT)')
76                                 define(`CURRRIGHT',`eval(CURRLEFT+((CURRNUMPINS-1)*PINDIST)+PINWIDTH)')
77                                 ElementLine(CURRLEFT LMAXY CURRRIGHT LMAXY 2)
78                                 ElementArc(CURRLEFT MAXY ARCRADIUS ARCRADIUS 0 90 2)
79                                 ElementArc(CURRRIGHT MAXY ARCRADIUS ARCRADIUS 90 90 2)
80                                 define(`CURRLEFT1',`eval(CURRLEFT-ARCRADIUS)')
81                                 define(`CURRRIGHT1',`eval(CURRRIGHT+ARCRADIUS)')
82                                 ElementLine(CURRLEFT1 0 CURRLEFT1 MAXY 1)
83                                 ElementLine(CURRRIGHT1 0 CURRRIGHT1 MAXY 1)
84                                 ifelse(1,eval((NUMARRAYS>1)&&(IDX1<LOOPIDX1)),`
85                                         define(`CURRDIAMETER',`arg'eval((IDX1*2)+3))
86                                         define(`CURRRADIUS',`eval(CURRDIAMETER/2)')
87                                         ElementArc(eval(CURRRIGHT+EDGEGAP+(CURRDIAMETER/2)) 0 CURRRADIUS CURRRADIUS 180 180 1)
88                                 ')
89                                 ifelse(1,eval(IDX1==LOOPIDX1),`
90                                         ElementLine(BRACKETLEFT LMAXY BRACKETLEFT BOARDTOP 1)
91                                         ElementLine(BRACKETLEFT BOARDTOP CURRRIGHT1 BOARDTOP 1)
92                                         ElementLine(CURRRIGHT1 BOARDTOP CURRRIGHT1 0 1)
93                                         
94                                         ElementArc(eval(BRACKETLEFT+SCREWBORDER) eval(LMAXY-SCREWBORDER) 125 125 0 360 1)
95                                         ElementArc(eval(BRACKETLEFT+SCREWBORDER) eval(BOARDTOP+SCREWBORDER) 125 125 0 360 1)
96                                 ')
97                         ')
98                         forloop(`IDX2',0,eval(CURRNUMPINS-1),
99                         `
100                                 define(`CURRX',`eval((PINDIST*IDX)+(ADDDIAMETER))')
101                                 define(`MINX',`eval(PINLEFT+CURRX)')
102                                 define(`MIDX',`eval(PINCENTER+CURRX)')
103                                 define(`MAXX',`eval(PINRIGHT+CURRX)')
104                                 define(`PINIDX',`eval(IDX+1+ADDSIDE)')
105                                 EDGECONN(MINX,MINY,MAXX,MINY,PENWIDTH,PINIDX,FLAG)
106                                 EDGECONN(MINX,MINY,MINX,MIDY,PENWIDTH,PINIDX,FLAG)
107                                 EDGECONN(MINX,MIDY,MIDX,MAXY,PENWIDTH,PINIDX,FLAG)
108                                 EDGECONN(MIDX,MINY,MIDX,MAXY,PENWIDTH,PINIDX,FLAG)
109                                 EDGECONN(MAXX,MINY,MAXX,MIDY,PENWIDTH,PINIDX,FLAG)
110                                 EDGECONN(MAXX,MIDY,MIDX,MAXY,PENWIDTH,PINIDX,FLAG)                              
111                                 define(`IDX',incr(IDX))
112                         ')
113                         
114                         ifelse(1,eval((NUMARRAYS>1)&&(IDX1<LOOPIDX1)),`
115                                 define(`ADDDIAMETER1',forloop(`IDX2',0,eval(IDX1),
116                                 ``arg'eval((IDX2*2)+3)+')0)
117                                 define(`ADDDIAMETER',eval(ADDDIAMETER1+(EDGEGAP*2)-PINDIST+PINWIDTH))
118                         ')
119                 ')
120                 define(`ADDSIDE',`TOTALPINS')
121                 define(`FLAG',0x80)
122         ')
123          
128 define(`PKG_PCI5V_AVE_HEIGHT',   `PKG_PCIPINARRAY(`$1', `$2', `$3', 2810,49,100,11)');
129 define(`PKG_PCI5V_MIN_HEIGHT',   `PKG_PCIPINARRAY(`$1', `$2', `$3', 1420,49,100,11)');
130 define(`PKG_PCI5V_MAX_HEIGHT',   `PKG_PCIPINARRAY(`$1', `$2', `$3', 4200,49,100,11)');
131 define(`PKG_PCI5V_SMALL_HEIGHT', `PKG_PCIPINARRAY(`$1', `$2', `$3', 2063,49,100,11)');