Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
DISCONTINUED:openSUSE:11.1:Update
pcb
pcb-1.6.3.djb.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File pcb-1.6.3.djb.patch of Package pcb
--- pcb-1.6.3/README_FILES/CHANGES +++ pcb-1.6.3/README_FILES/CHANGES @@ -1,4 +1,62 @@ /* + * Additions of D.J. Barrow dj_barrow@ariasoft.ie + * + */ +Main changes +A few new package definitions including +Common SMT components,PCI Board Templates, XCS40 FPGA, +Improvments to QFP definitions. + +Made Soldermask Adjustable it was set to 15 Mils +this was impractical for SMT components as the primary +use of the soldermask is to prevent unwanted soldering +of tracks & pads together & as the space between components +on a PCI board is typically 4 mils this is too much. + +Made gridding adjustable to 1 mil increments +( 1 thousand'th of an inch ), this is required for SMT development. + +Fixed one crashbug in insert.c owing to missing protype + + +Files added: +lib/fpga.list +lib/fpga.m4 +lib/pci.inc +lib/pci.list +lib/pci.m4 +genericsmt.inc +genericsmt.list +lib/genericsmt.m4 + +Files Modified: +globalconst.h +lib/common.m4 +lib/qfp.inc +lib/transistor.list +src/Pcb.ad.raw +src/action.c +src/create.c +src/dev_gerber.c +src/dev_ps.c +src/dev_rs274x.c +src/file.c +src/global.h +src/insert.c +src/main.c +src/menu.c +src/parse_l.l +src/parse_y.h +src/parse_y.y +src/print.c +src/report.c +src/sed.script +src/set.c +src/set.h + + + +/* * This package is PCB 1.6.3 release by harry eaton. * * I'm too lazy to document all of the changed files --- pcb-1.6.3/README_FILES/DJBARROW_HINTS.TXT +++ pcb-1.6.3/README_FILES/DJBARROW_HINTS.TXT @@ -0,0 +1,145 @@ +Hi all, + +Hopefully the following hints & suggestions will make it easier +for you to build your PCB's. + +Stuff I figured out the hard way +================================ +Firstly the unit of measurment of pcb-1.6.3 is a mil +whichis a thousand'th of an inch. +I defined a m4 UM_TO_MIL ( micrometer to mil ) +macro to ease entering metric components. + +The main purpose of a soldermask/component mask is to insulate +the tracks & prevent bad soldering joining tracks +or pads together unintensionally. +For this reason I made the soldermask size adjustable +it was 15 mils which was simply too big for PCI boards. + + +To get good at designing new components is pretty +painful they are written in a macro language called +m4 & this is used extensively, this saved coding +which otherwise would be needed in the parser of the +gnu pcb files, a gui editor would be better provided +it used text files which is a blessing in gnu pcb. + + +i.e. 2 passes of m4 are run by the CreateLibrary.sh +& CreateLibraryContents.sh scripts & a final pass +is run internally by the Expandfilename function. + +The most useful hotkey in gnu pcb is the c key this recentres +the board at the current mouse cursor position which +is extremely useful for moving around boards larger than the +screensize. + + +invoke like +m4 -dV +for verbose debugging info. + +The large m4 files +pcblib & pcblib.contents in +/usr/X11R6/lib/X11/pcb +are created by running scripts like +CreateLibrary.sh ../pcblib m4/common.m4 m4/*.m4 +CreateLibraryContents.sh m4/common.m4 m4/*.list > pcblib.contents + + +To get a single component parsed which might give you some +ideas on debugging do something like. +../CreateLibrary.sh ../pcblib common.m4 *.m4 +../CreateLibraryContents.sh common.m4 *.list >../pcblib.contents +/usr/X11R6/lib/X11/pcb/QueryLibrary.sh '/usr/X11R6/lib/X11/pcb' 'pcblib' 'XCS40_PQ208' 'XCS40' 'COMPACTQFP' + + +To find out about m4 type 'info m4' if you have m4 +documentation installed in your distro. + +The central place where these m4 files are loaded is +the popen call in misc.c ExpandFilename function the parseing +functions in parse_l.l parse_y.y are called from here +If you get parse errors get gdb involved * do some debugging. + +It is also very useful to edit the saved pcb files by hand +as you can do a lot this way which might not be possible from +within the package. + + +For building boards I recommend www.pcbpool.com ( this is not +a plug ) however they have managed to build my boards which is pretty +unbelievable they are very cost effective & much less painful than +explaining ruined carpets etc. with chemicals if you plan to do it yourself. + + +For soldering SMT QFP's with .5 mil between the pins it was suggested +by a more experienced hardware engineer to use solder paste & a stensil, +rather than soldering the pins ( I wasted quite a few components by trying +to solder them the normal way ), if somebody can make a stensil with an inkjet printer +please let me know how you do it. + +For practicing soldering dummy components are also a good idea, +see + + + +They have a free package online called GCPrevue which runs +under windows ( & possibly wine too ) which is the file format +they expect to receive the files, the gerber files from gnu pcb can be +imported to this transparently the only thing which causes a little fun is +the drill sizes which need to be entered by hand. + + +What can be improved +==================== + +It is so much easier to suggest what could be improved than spending +the few man months required to do it. + +It would be an ideal final year project for some electronic engineer or +computer science guy ( Talk to your teacher ). + + +The code is okay but needs a cleanup the objects should +be inherited from a single base & flags like solder side & component side +shouldn't be used insead the code should have layer numbers. + +The objects should be a proper linked list tree ( i.e with parent child sibling ) rather than +current 3 level Board, Element, Pad etc as it currently is. +& it should be possible to select everything from a single +pad to the whole board with the same code & based on a single base class +( to use a C++ ism, this can be done in C ). + +e.g. +There is distinct code for handling lines & elementlines, arcs & elementarcs. +I tried adding an outline layer for the PCI m4 components I added however +the fact that an elementline has to belong to the same layer as its parent +element & would require extensive coding & testing to verify it was okay +prevented me. +So for now you have to move the PCI board outline I set up by hand in the file to +the appropriate layer. + +The polygon tool ( which is commonly needed for ground planes is absolutely awful ), +it took me as long to put down ground planes as it did the rest of my board. +This should be like a paint tool in common paint packages & automatically fill +using the tracks & pads as an outline. + +A kde front end would be nice. + +Auto routing, there is apparently a freeware algorithm for this available, +I am sure this would be very difficult to add till the code is cleaned up, +it possibly can be found on www.opencollector.org. + + +Have Fun, +D.J. +dj_barrow@ariasoft.ie + + + + + + + + --- pcb-1.6.3/globalconst.h +++ pcb-1.6.3/globalconst.h @@ -74,6 +74,10 @@ #define CHUNK 5 /* step size for size sliders */ #define MIN_ZOOM 0 /* min zoom (shift operations) */ #define MAX_ZOOM 4 /* max zoom (shift operations) */ +#define MIN_SOLDERMASK_FRAME 0 /* tolerance between soldermask & pads. */ +#define DEFAULT_SOLDERMASK_FRAME 0 +#define MAX_SOLDERMASK_FRAME 100 + #define MAX_FONTPOSITION 127 /* upper limit of characters in my font */ #define MAX_COORD 20000 /* coordinate limits */ --- pcb-1.6.3/lib/Imakefile +++ pcb-1.6.3/lib/Imakefile @@ -33,21 +33,22 @@ TARGETS = $(DEFAULTLIBRARY) $(DEFAULTLIBRARY).contents COMMON = common.m4 -INC = connector.inc dil.inc misc.inc plcc.inc to.inc qfp.inc +INC = connector.inc dil.inc misc.inc plcc.inc to.inc qfp.inc \ + pci.inc genericsmt.inc SRC = TTL_74xx_DIL.m4 \ crystal.m4 connector.m4 generic.m4 \ linear.m4 logic.m4 lsi.m4 memory.m4 \ optical.m4 resistor_array.m4 resistor_0.25W.m4 \ texas_inst_voltage_reg.m4 texas_inst_amplifier.m4 \ - transistor.m4 + transistor.m4 fpga.m4 pci.m4 genericsmt.m4 LIST = TTL_74xx_DIL.list \ crystal.list connector.list generic.list \ linear.list logic.list lsi.list memory.list \ optical.list resistor_array.list resistor_0.25W.list \ texas_inst_voltage_reg.list texas_inst_amplifier.list \ - transistor.list + transistor.list fpga.list pci.list genericsmt.list SCRIPTS = CreateLibrary.sh CreateLibraryContents.sh \ ListLibraryContents.sh QueryLibrary.sh --- pcb-1.6.3/lib/common.m4 +++ pcb-1.6.3/lib/common.m4 @@ -54,7 +54,9 @@ # the first two arguments are skipped # define(`PIN', `Pin($1 $2 $3 $4 ifdef(`P_$5', "P_$5", "$5") ifelse($5, 1, 0x101, 0x01))') -define(`PAD', `Pad($1 $2 $3 $4 $5 ifdef(`P_$6', "P_$6", "$6") ifelse($6, 1, 0x00, 0x100))') +define(`PAD', `Pad($1 $2 $3 $4 $5 ifdef(`P_$6', "P_$6", "$6") "$6" ifelse($6, 1, 0x00, 0x100))') + +define(`EDGECONN', `Pad($1 $2 $3 $4 $5 ifdef(`P_$6', "P_$6", "$6") "$6" $7)') define(`DEFPIN', `define(`count', incr(count))' `define(`P_'count, $1)') define(`DefinePinList', `ifelse($#, 1, , `pushdef(`count')' @@ -65,11 +67,16 @@ `DEFPIN(`$1')'` _DEFPINLIST(shift($@))')') +define(`args',` + ifelse($#, 0, , $#, 1,`define(`arg'cnt,`$1')', + `define(`arg'cnt,`$1') define(`cnt',incr(cnt)) args(shift($@))')') + include(connector.inc) include(dil.inc) include(misc.inc) include(plcc.inc) include(to.inc) include(qfp.inc) - +include(pci.inc) +include(genericsmt.inc) divert(0)dnl --- pcb-1.6.3/lib/fpga.list +++ pcb-1.6.3/lib/fpga.list @@ -0,0 +1,2 @@ +XCS40_PQ208:COMPACTQFP:XCS40 +AT512:JEDECQFP2:JEDEC --- pcb-1.6.3/lib/fpga.m4 +++ pcb-1.6.3/lib/fpga.m4 @@ -0,0 +1,48 @@ +divert(-1) +# +# Definitions for Xilinx XCS40 FPGA's +# by D.J. Barrow dj_barrow@ariasoft.ie +# +define(`PL_XCS40_PQ208_1',``GND',`IO_GCK1',`I/O',`I/O',`I/O',`I/O(TDI)',`I/O_TCK',`I/O',`I/O',`I/O',`I/O',`I/O'') #P12 + +define(`PL_XCS40_PQ208_2',``GND',`I/O',`I/O',`I/O(TMS)',`I/O',`VCC'') #P18 + +define(`PL_XCS40_PQ208_3',``I/O',`I/O',`I/O',`I/O',`I/O',`I/O',`GND',`VCC',`I/O',`I/O',`I/O',`I/O'') #29 + +define(`PL_XCS40_PQ208_4',``I/O',`I/O',`VCC',`I/O',`I/O',`I/O',`I/O',`GND',`I/O',`I/O',`I/O',`I/O',`I/O',`I/O',`I/O',`I/O',`I/O',`I/O',`I/O_GCK2'') #P49 + +define(`PL_XCS40_PQ208_5',``M1',`GND',`M0',`VCC',`PWRDOWN',`I/O(GCK3)',`I/O(HDC)',`I/O',`I/O',`I/O',`I/O(LDC)',`I/O',`I/O',`I/O',`I/O',`I/O'') #66 + +define(`PL_XCS40_PQ208_6',``GND',`I/O',`I/O',`I/O',`I/O',`VCC',`I/O',`I/O',`I/O',`I/O',`I/O',`I/O(INIT)',`VCC',`GND',`I/O',`I/O',`I/O',`I/O'') #83 + +define(`PL_XCS40_PQ208_7',``I/O',`I/O',`VCC',`I/O',`I/O',`I/O',`I/O',`GND',`I/O',`I/O',`I/O',`I/O',`I/O',`I/O',`I/O',`I/O',`I/O',`I/O',`I/O(GCK4)',`GND',`DONE',`VCC',`PROGRAM',`I/O(D7)'') #107 + +define(`PL_XCS40_PQ208_8',``I/O(GCK5)',`I/O',`I/O',`I/O',`I/O(D6)',`I/O',`I/O',`I/O',`I/O',`I/O',`GND',`I/O',`I/O',`VCC',`I/O(D5)',`I/O'') #123 + +define(`PL_XCS40_PQ208_9',``I/O',`I/O',`I/O',`I/O',`I/O(D4)',`I/O',`VCC',`GND',`I/O(D3)',`I/O',`I/O',`I/O',`I/O',`I/O'') #137 + +define(`PL_XCS40_PQ208_10',``I/O(D2)',`I/O',`VCC',`I/O',`I/O',`GND',`I/O',`I/O',`I/O',`I/O',`I/O',`I/O(D1)',`I/O',`I/O',`I/O',`I/O(D0_DIN)',`I/O(GCK6_DOUT)',`CCLK',`VCC',`O(TDO)'') #157 + +define(`PL_XCS40_PQ208_11',``GND',`I/O',`I/O(GCK7)',`I/O',`I/O',`I/O(CS1)',`I/O',`I/O',`I/O',`I/O',`I/O',`I/O',`GND',`I/O',`I/O',`VCC',`I/O',`I/O',`I/O',`I/O',`I/O',`I/O',`I/O',`I/O',`GND'') + +define(`PL_XCS40_PQ208_12',``VCC',`I/O',`I/O',`I/O',`I/O',`I/O',`I/O',`I/O',`I/O',`VCC',`I/O',`I/O',`GND',`I/O',`I/O',`I/O',`I/O',`I/O',`I/O',`I/O',`I/O',`I/O',`I/O',`I/O',`I/O(GCK8)',`VCC'') #208 + +define(`Description_XCS40_PQ208',`Xilinx XCS40 PQ208') +define(`PinList_XCS40_PQ208',`PL_XCS40_PQ208_1,PL_XCS40_PQ208_2,PL_XCS40_PQ208_3,PL_XCS40_PQ208_4,PL_XCS40_PQ208_5,PL_XCS40_PQ208_6,PL_XCS40_PQ208_7,PL_XCS40_PQ208_8,PL_XCS40_PQ208_9,PL_XCS40_PQ208_10,PL_XCS40_PQ208_11,PL_XCS40_PQ208_12') +define(`Param1_XCS40_PQ208',`208') +define(`Param2_XCS40_PQ208',`0') +define(`Description_AT512',`Atmel FPGA Configuration Memory AT512 AT010') +define(`Param1_AT512',`20') +define(`Param2_AT512',`0') +define(`PinList_AT512',``NC',`DATA',`NC',`CLK',`WP1',`RESET_OE',`WP2',`CE',`NC',`GND',`NC',`NC',`NC',`CEO_A2',`READY',`NC',`SER_EN',`NC',`NC',`VCC'') +divert(0)dnl + + + + + + + + + + --- pcb-1.6.3/lib/genericsmt.inc +++ pcb-1.6.3/lib/genericsmt.inc @@ -0,0 +1,42 @@ +# Convert micrometers to mils ( thousandths of an inch ) +define(`UM_TO_MIL',`eval(($1*10)/254)') +# the definition of a general axial package +# $1: canonical name +# $2: name on PCB +# $3: length, width,padlength +define(`PKG_GENERIC_SMT',` + define(`cnt',`1') + define(`ARGS',$3) + args(ARGS) + define(`LENGTH',`UM_TO_MIL(arg1)') + define(`WIDTH',`UM_TO_MIL(arg2)') + define(`PADLENGTH',`UM_TO_MIL(arg3)') + define(`CENTRE',`eval(LENGTH/2)') + define(`PENWIDTH',`eval(PADLENGTH)') + define(`PADLENGTH2',`eval(LENGTH-PADLENGTH)') + define(`PADCENTRE',`eval(PADLENGTH/2)') + define(`PADCENTRE2',`eval(LENGTH-(PADLENGTH/2))') +Element(0x00 "$1" "$2" "$3" CENTRE eval(WIDTH+10) 0 100 0x00) +( + PAD(0,0,0,WIDTH,PENWIDTH, 1) + PAD(0,0,PADLENGTH,0,PENWIDTH,1) + PAD(PADLENGTH,0,PADLENGTH,WIDTH,PENWIDTH, 1) + PAD(0,WIDTH,PADLENGTH,WIDTH,PENWIDTH, 1) + PAD(PADCENTRE,0,PADCENTRE,WIDTH,PENWIDTH,1) + + + PAD(LENGTH,0,LENGTH,WIDTH,PENWIDTH, 1) + PAD(LENGTH,0,PADLENGTH2,0,PENWIDTH,1) + PAD(PADLENGTH2,0,PADLENGTH2,WIDTH,PENWIDTH, 1) + PAD(LENGTH,WIDTH,PADLENGTH2,WIDTH,PENWIDTH, 1) + PAD(PADCENTRE2,0,PADCENTRE2,WIDTH,PENWIDTH,1) + + ElementLine(0 0 LENGTH 0 1) + ElementLine(LENGTH 0 LENGTH WIDTH 1) + ElementLine(0 WIDTH LENGTH WIDTH 1) + ElementLine(0 0 0 WIDTH 1) + +) +') + + --- pcb-1.6.3/lib/genericsmt.list +++ pcb-1.6.3/lib/genericsmt.list @@ -0,0 +1,12 @@ +JEDEC_20_PIN_PLCC:JEDECQFP:JEDEC +SMT_402_CAP_RES:GENERIC_SMT:1000,500,250 +SMT_603_CAP_RES:GENERIC_SMT:1600,800,250 +SMT_805_CAP_RES:GENERIC_SMT:2100,1300,350 +SMT_1206_CAP_RES:GENERIC_SMT:3100,1550,450 +SMT_2010_CAP_RES:GENERIC_SMT:5000,2500,650 +SMT_2512_CAP_RES:GENERIC_SMT:6400,3200,750 + + + + + --- pcb-1.6.3/lib/genericsmt.m4 +++ pcb-1.6.3/lib/genericsmt.m4 @@ -0,0 +1,23 @@ +divert(-1) +# +# Definitions for common SMT components +# by D.J. Barrow dj_barrow@ariasoft.ie +# +define(`Description_JEDEC_20_PIN_PLCC',`Jedec 20 pin PLCC QFP') +define(`Param1_JEDEC_20_PIN_PLCC',`20') +define(`Param2_JEDEC_20_PIN_PLCC',`0') +define(`Description_SMT_402_CAP_RES',`SMT 402 type capicitor/resistor') +define(`Description_SMT_603_CAP_RES',`SMT 603 type capicitor/resistor') +define(`Description_SMT_805_CAP_RES',`SMT 805 type capicitor/resistor') +define(`Description_SMT_1206_CAP_RES',`SMT 1206 type capicitor/resistor') +define(`Description_SMT_2010_CAP_RES',`SMT 2010 type capicitor/resistor') +define(`Description_SMT_2512_CAP_RES',`SMT 2512 type capicitor/resistor') +divert(0)dnl + + + + + + + + --- pcb-1.6.3/lib/pci.inc +++ pcb-1.6.3/lib/pci.inc @@ -0,0 +1,133 @@ +# +# Definitions for PCI boards +# by D.J. Barrow dj_barrow@ariasoft.ie +# +# please note that you will need to edit the saved pcb file +# by hand to move the board outline onto a seperate layer +# I suggest one of the unused layers. + +define(`GETNUMARRAYS',`eval(($#)/2)') +# $1: canonical name +# $2: name on PCB +# $3: boardheight,number of pins,arcradius,..., number of pins +define(`PKG_PCIPINARRAY', + ` + define(`cnt',`1') + define(`ARGS',$3) + args(ARGS) + define(`LEFTOFFSET',`100') + define(`EDGEGAP',`12') + define(`PINDIST',`50') + define(`PINWIDTH',`25') + define(`NUMARRAYS',`GETNUMARRAYS(ARGS)') + define(`TOTALPINS1',forloop(`IDX',0,eval(NUMARRAYS-1), + ``arg'eval((IDX*2)+2) + ')0) + define(`TOTALPINS',eval(TOTALPINS1)) + ifelse(1,eval(NUMARRAYS>1),` + define(`TOTALDIAMETER1',forloop(`IDX',0,eval(NUMARRAYS-2), + ``arg'eval((IDX*2)+3) + ')0) + define(`TOTALDIAMETER',eval(TOTALDIAMETER1)) + ') + define(`PINCENTER',`eval(LEFTOFFSET+(PINDIST/2))') + define(`PINRADIUS',`eval(PINWIDTH/2)') + define(`PINLEFT',`eval(PINCENTER-PINRADIUS)') + define(`PINRIGHT',`eval(PINCENTER+PINRADIUS)') + define(`PENWIDTH',`eval(PINRADIUS+1)') + define(`PENRADIUS',`eval(PENWIDTH/2)') + define(`MAXIDX',`eval(TOTALPINS - 1)') + define(`ARRAYWIDTH', `eval((TOTALPINS*PINDIST)+TOTALDIAMETER)') + define(`CENTERX', `eval(((ARRAYWIDTH+LEFTOFFSET)/2))') + define(`MINY',`20') + define(`MIDY',`220') + define(`MAXY',`270') + define(`ARCRADIUS',`12') + define(`ARCDIAMETER',`eval(ARCRADIUS*2)') + define(`LMAXY',`eval(MAXY+ARCRADIUS)') + define(`BOARDTOP',`eval(LMAXY-arg1)') + define(`SCREWBORDER',275) +Element(0x00 "$1" "$2" "$3" CENTERX 10 1 30 0x00) +( + Mark(CENTERX 135) + define(`ADDSIDE',0) + define(`FLAG',0x0) + define(`LOOPIDX1',eval(NUMARRAYS-1)) + define(`LEFT1',`eval(PINLEFT-ARCRADIUS)') + define(`ARCRADIUS2',`100') + define(`SLOTWIDTH',`1000') + define(`BRACKETLEFT',`-1525') + define(`LEFT2',`eval(LEFT1-ARCRADIUS2)') + define(`LEFT3',`eval(LEFT1+ARCRADIUS2-SLOTWIDTH)') + define(`LEFT4',`eval(LEFT1-SLOTWIDTH)') + ElementArc(LEFT2 0 ARCRADIUS2 ARCRADIUS2 180 90 1) + ElementLine(LEFT2 -ARCRADIUS2 LEFT3 -ARCRADIUS2 1) + ElementArc(LEFT3 0 ARCRADIUS2 ARCRADIUS2 270 90 1) + ElementLine(LEFT4 0 LEFT4 MAXY 1) + define(`LEFT5',`eval(LEFT4-ARCRADIUS)') + ElementArc(LEFT5 MAXY ARCRADIUS ARCRADIUS 90 90 1) + ElementLine(LEFT5 LMAXY BRACKETLEFT LMAXY 1) + forloop(`SIDE',0,1, + ` + define(`IDX',`0') + define(`ADDDIAMETER',`0') + forloop(`IDX1',0,LOOPIDX1, + ` + define(`CURRNUMPINS',`arg'eval((IDX1*2)+2)) + ifelse(SIDE,`0',` + define(`CURRLEFT',`eval((PINDIST*IDX)+(ADDDIAMETER)+PINLEFT)') + define(`CURRRIGHT',`eval(CURRLEFT+((CURRNUMPINS-1)*PINDIST)+PINWIDTH)') + ElementLine(CURRLEFT LMAXY CURRRIGHT LMAXY 2) + ElementArc(CURRLEFT MAXY ARCRADIUS ARCRADIUS 0 90 2) + ElementArc(CURRRIGHT MAXY ARCRADIUS ARCRADIUS 90 90 2) + define(`CURRLEFT1',`eval(CURRLEFT-ARCRADIUS)') + define(`CURRRIGHT1',`eval(CURRRIGHT+ARCRADIUS)') + ElementLine(CURRLEFT1 0 CURRLEFT1 MAXY 1) + ElementLine(CURRRIGHT1 0 CURRRIGHT1 MAXY 1) + ifelse(1,eval((NUMARRAYS>1)&&(IDX1<LOOPIDX1)),` + define(`CURRDIAMETER',`arg'eval((IDX1*2)+3)) + define(`CURRRADIUS',`eval(CURRDIAMETER/2)') + ElementArc(eval(CURRRIGHT+EDGEGAP+(CURRDIAMETER/2)) 0 CURRRADIUS CURRRADIUS 180 180 1) + ') + ifelse(1,eval(IDX1==LOOPIDX1),` + ElementLine(BRACKETLEFT LMAXY BRACKETLEFT BOARDTOP 1) + ElementLine(BRACKETLEFT BOARDTOP CURRRIGHT1 BOARDTOP 1) + ElementLine(CURRRIGHT1 BOARDTOP CURRRIGHT1 0 1) + + ElementArc(eval(BRACKETLEFT+SCREWBORDER) eval(LMAXY-SCREWBORDER) 125 125 0 360 1) + ElementArc(eval(BRACKETLEFT+SCREWBORDER) eval(BOARDTOP+SCREWBORDER) 125 125 0 360 1) + ') + ') + forloop(`IDX2',0,eval(CURRNUMPINS-1), + ` + define(`CURRX',`eval((PINDIST*IDX)+(ADDDIAMETER))') + define(`MINX',`eval(PINLEFT+CURRX)') + define(`MIDX',`eval(PINCENTER+CURRX)') + define(`MAXX',`eval(PINRIGHT+CURRX)') + define(`PINIDX',`eval(IDX+1+ADDSIDE)') + EDGECONN(MINX,MINY,MAXX,MINY,PENWIDTH,PINIDX,FLAG) + EDGECONN(MINX,MINY,MINX,MIDY,PENWIDTH,PINIDX,FLAG) + EDGECONN(MINX,MIDY,MIDX,MAXY,PENWIDTH,PINIDX,FLAG) + EDGECONN(MIDX,MINY,MIDX,MAXY,PENWIDTH,PINIDX,FLAG) + EDGECONN(MAXX,MINY,MAXX,MIDY,PENWIDTH,PINIDX,FLAG) + EDGECONN(MAXX,MIDY,MIDX,MAXY,PENWIDTH,PINIDX,FLAG) + define(`IDX',incr(IDX)) + ') + + ifelse(1,eval((NUMARRAYS>1)&&(IDX1<LOOPIDX1)),` + define(`ADDDIAMETER1',forloop(`IDX2',0,eval(IDX1), + ``arg'eval((IDX2*2)+3)+')0) + define(`ADDDIAMETER',eval(ADDDIAMETER1+(EDGEGAP*2)-PINDIST+PINWIDTH)) + ') + ') + define(`ADDSIDE',`TOTALPINS') + define(`FLAG',0x80) + ') + +)') + + + + + + + + --- pcb-1.6.3/lib/pci.list +++ pcb-1.6.3/lib/pci.list @@ -0,0 +1,6 @@ +PCI5V_AVE_HEIGHT:PCIPINARRAY:2810,49,100,11 +PCI5V_MIN_HEIGHT:PCIPINARRAY:1420,49,100,11 +PCI5V_MAX_HEIGHT:PCIPINARRAY:4200,49,100,11 +PCI5V_SMALL_HEIGHT:PCIPINARRAY:2063,49,100,11 + + --- pcb-1.6.3/lib/pci.m4 +++ pcb-1.6.3/lib/pci.m4 @@ -0,0 +1,42 @@ +divert(-1) +# +# Definitions for PCI boards +# by D.J. Barrow dj_barrow@ariasoft.ie +# +define(`PL_PCISideB1',``-12V',`TCK',`Ground',`TD0',`+5V',`+5V',`INTB*',`INTD*',`PRSNT1*',`Reserved',`PRSNT2*'') + +define(`PL_PCISideB2',``Ground',`Ground'') + +define(`PL_PCISideB3',``Reserved',`Ground',`CLK',`Ground',`REQ*',`+5V',`AD[31]',`AD[29]',`Ground',`AD[27]',`AD[25]',`+3.3V',`C/BE[3]*',`AD[23]',`Ground',`AD[21]',`AD[19]',`+3.3V',`AD[17]',`C/BE[2]*',`Ground',`IRDY*',`+3.3V',`DEVSEL*',`Ground',`LOCK*',`PERR*',`+3.3V',`SERR*',`+3.3V',`C/BE[1]*',`AD[14]',`Ground',`AD[12]',`AD[10]',`Ground'') + +define(`PL_PCISideB4',``Ground',`Ground'') +define(`PL_PCISideB5',``AD[08]',`AD[07]',`+3.3V',`AD[05]',`AD[03]',`Ground',`AD[01]',`+5V',`ACK64*',`+5V',`+5V'') + + +define(`PL_PCISideB6',``Reserved',`Ground',`C/BE[6]*',`C/BE[4]*',`Ground',`AD[63]',`AD[61]',`+5V',`AD[59]',`AD[57]',`Ground',`AD[55]',`AD[53]',`Ground',`AD[51]',`AD[49]',`+5V',`AD[47]',`AD[45]',`Ground',`AD[43]',`AD[41]',`Ground',`AD[39]',`AD[37]',`+5V',`AD[35]',`AD[33]',`Ground',`Reserved',`Reserved',`Ground'') + +define(`PL_PCISideA1',``TRST*',`+12V',`TMS',`TDI',`+5V',`INTA*',`INTC*',`+5V',`Reserved',`+5V',`Reserved'') + +define(`PL_PCISideA2',``Ground',`Ground'') +define(`PL_PCISideA3',``3.3Vaux',`RST*',`+5V',`GNT*',`Ground',`PME*',`AD[30]',`+3.3V',`AD[28]',`AD[26]',`Ground',`AD[24]',`IDSEL',`+3.3V',`AD[22]',`AD[20]',`Ground',`AD[18]',`AD[16]',`+3.3V',`FRAME*',`Ground',`TRDY*',`Ground',`STOP*',`+3.3V',`Reserved',`Reserved',`Ground',`PAR',`AD[15]',`+3.3V',`AD[13]',`AD[11]',`Ground',`AD[09]'') + + +define(`PL_PCISideA4',``Ground',`Ground'') +define(`PL_PCISideA5',``C/BE[0]*',`+3.3V',`AD[06]',`AD[04]',`Ground',`AD[02]',`AD[00]',`+5V',`REQ64*',`+5V',`+5V'') + +define(`PL_PCISideA6',``Ground',`C/BE[7]*',`C/BE[5]*',`+5V',`PAR64',`AD[62]',`Ground',`AD[60]',`AD[58]',`Ground',`AD[56]',`AD[54]',`+5V',`AD[52]',`AD[50]',`Ground',`AD[48]',`AD[46]',`Ground',`AD[44]',`AD[42]',`+5V',`AD[40]',`AD[38]',`Ground',`AD[36]',`AD[34]',`Ground',`AD[32]',`Reserved',`Ground',`Reserved'') +define(`Description_PCI5V_AVE_HEIGHT',`PCI 5V Array Average Height') +define(`Description_PCI5V_MIN_HEIGHT',`PCI 5V Array Min Height') +define(`Description_PCI5V_MAX_HEIGHT',`PCI 5V Array Max Height') +define(`Description_PCI5V_SMALL_HEIGHT',`PCI 5V Array Small Height') +define(`PinList_PCI5V',`PL_PCISideB1,PL_PCISideB2,PL_PCISideB3,PL_PCISideB5,PL_PCISideA1,PL_PCISideA2,PL_PCISideA3,PL_PCISideA5') + +divert(0)dnl + + + + + + + + --- pcb-1.6.3/lib/qfp.inc +++ pcb-1.6.3/lib/qfp.inc @@ -21,79 +21,119 @@ # Contact addresses for paper mail and Email: # Thomas Nau, Schlehenweg 15, 88471 Baustetten, Germany # Thomas.Nau@rz.uni-ulm.de +# Improvments by D.J. Barrow dj_barrow@ariasoft.ie # # RCS: $Id: qfp.inc,v 0.1 1998/03/31 00:34:00 olson Exp $ # # QFP packages # - -# ------------------------------------------------------------------- -# ThanX to Johan Andersson (johan@homemail.com), modified by Thomas Nau -# the definition of a plcc package for base code to make qfp package. -# modified for correct pad numbering by Holm Tiffe -# -# Code from plcc.inc modified by Thomas Olson to make this qfp.inc definition. -# Although in retrospec quad flat packs are more diverse than this algorithm will do. -# Many qfp are the same physical size but have more thus narrower pads. # $1: canonical name # $2: name on PCB # $3: value # $4: number of pins -# $5: additional border (will be ignored) -# -define(`PKG_QFP', +# $5: additional border +# $6: pad pitch in millionths of inches +# $7: pad thickness +# $8: pad min offset ( edge nearest package ) +# $9: pad max offset ( edge furthest away from package ) +# $10: pin0 in middle +define(`PKG_GENERIC_QFP', `define(`QUARTER', `eval($4 /4)') define(`OFFSET', `eval((QUARTER +1) /2)') - define(`WIDTH', `eval((QUARTER-1) *31 +2*42)') + define(`BORDER',`$5') + define(`PITCH',`$6') + define(`WIDTH', `eval((((QUARTER-1)*PITCH)/1000)+2*BORDER)') define(`CENTER', `eval(WIDTH / 2)') define(`NUMPINS', `$4') + define(`PADTHICKNESS',`$7') + define(`PADMINOFFSET',`$8') + define(`PADMAXOFFSET',`$9') + define(`FARPIN',`eval(WIDTH-BORDER)') + define(`PIN1INMIDDLE',`$10') + define(`EDGECUT',`ifelse(1,eval(PIN1INMIDDLE),`0',`28')') + define(`STARTPIN',`ifelse(1,eval(PIN1INMIDDLE),`eval(((QUARTER+1)/2)+1)',`1')') + define(`CIRCLECENTRE',`ifelse(1,eval(PIN1INMIDDLE),`eval(WIDTH/2)',35)') Element(0x00 "$1" "$2" "$3" 100 CENTER 0 100 0x00) ( # left row define(`X', 0) -define(`Y', 42) -#define(`count', `eval(OFFSET+1)') -define(`count', 1) +define(`QFPPIN',`STARTPIN') +define(`idx',0) forloop(`i', 1, QUARTER, - `PAD(eval(X-65), Y, eval(X+5), Y, 20, count)' `define(`count', incr(count))' - `define(`Y', eval(Y+31))' - ) + `define(`Y', `eval(BORDER+((PITCH*idx)/1000))')' + `PAD(eval(X-PADMAXOFFSET), Y, eval(X+PADMINOFFSET), Y, PADTHICKNESS, QFPPIN)' + `define(`QFPPIN', incr(QFPPIN))' + `define(`idx',incr(idx))' +) # bottom row -define(`X', 42) define(`Y', WIDTH) +define(`idx',0) forloop(`i', 1, QUARTER, - `PAD(X, eval(Y+65), X, eval(Y-5), 20, count)' `define(`count', incr(count))' - `define(`X', eval(X+31))' + `define(`X', `eval(BORDER+((PITCH*idx)/1000))')' + `PAD(X, eval(Y+PADMAXOFFSET), X, eval(Y-PADMINOFFSET), PADTHICKNESS, QFPPIN)' + `define(`QFPPIN', incr(QFPPIN))' + `define(`idx',incr(idx))' ) # right row define(`X', WIDTH) -define(`Y', eval(WIDTH-42)) +define(`idx',0) forloop(`i', 1, QUARTER, - `PAD(eval(X+65), Y, eval(X-5), Y, 20, count)' `define(`count', incr(count))' - `define(`Y', eval(Y-31))' + `define(`Y', `eval(FARPIN-((PITCH*idx)/1000))')' + `PAD(eval(X+PADMAXOFFSET), Y, eval(X-PADMINOFFSET), Y, PADTHICKNESS, QFPPIN)' + `define(`QFPPIN', incr(QFPPIN))' + `define(`idx',incr(idx))' ) # top row -define(`X', eval(WIDTH-42)) define(`Y', 0) +define(`idx',0) forloop(`i', 1, QUARTER, - `PAD(X, eval(Y-65), X, eval(Y+5), 20, count)' `define(`count', incr(count))' - `ifelse(eval(count > NUMPINS), 1, `define(`count', 1)')' - `define(`X', eval(X-31))' + `define(`X',`eval(FARPIN-((PITCH*idx)/1000))')' + `PAD(X, eval(Y-PADMAXOFFSET), X, eval(Y+PADMINOFFSET), PADTHICKNESS, QFPPIN)' + `define(`QFPPIN', incr(QFPPIN))' + `ifelse(eval(QFPPIN > NUMPINS), 1, `define(`QFPPIN', 1)')' + `define(`idx',incr(idx))' ) - ElementLine(28 0 WIDTH 0 10) + ElementLine(EDGECUT 0 WIDTH 0 10) ElementLine(WIDTH 0 WIDTH WIDTH 10) ElementLine(WIDTH WIDTH 0 WIDTH 10) - ElementLine(0 WIDTH 0 28 10) - ElementLine(0 28 28 0 10) - - ElementArc(80 80 20 20 0 360 10) + ElementLine(0 WIDTH 0 EDGECUT 10) + ElementLine(0 EDGECUT EDGECUT 0 10) + ElementArc(CIRCLECENTRE 35 10 10 0 360 10) Mark(0 0) )') # ------------------------------------------------------------------- +# ThanX to Johan Andersson (johan@homemail.com), modified by Thomas Nau +# the definition of a plcc package for base code to make qfp package. +# modified for correct pad numbering by Holm Tiffe +# +# Code from plcc.inc modified by Thomas Olson to make this qfp.inc definition. +# Although in retrospec quad flat packs are more diverse than this algorithm will do. +# Many qfp are the same physical size but have more thus narrower pads. +# $1: canonical name +# $2: name on PCB +# $3: value +# $4: number of pins +# $5: additional border (will be ignored) +# +define(`PKG_QFP',`PKG_GENERIC_QFP(`$1',`$2',`$3',`$4',`42',`31000',`20',`5',`65',`0')') +# Same as QFP except more compact typical example is a XCS40 PQ 208C +define(`PKG_COMPACTQFP',`PKG_GENERIC_QFP(`$1',`$2',`$3',`$4',`39',`19685',`12',`-20',`80',`0')') +define(`PKG_JEDECQFP2',`PKG_GENERIC_QFP(`$1',`$2',`$3',`$4',`42',`50000',`35',`-5',`65',`1')') + +# ------------------------------------------------------------------- + + + + + + + + + --- pcb-1.6.3/src/Pcb.ad.raw +++ pcb-1.6.3/src/Pcb.ad.raw @@ -402,8 +402,8 @@ !Shift<Key>e: DeleteRats(SelectedRats) \n\ None<Key>f: Connection(Find) \n\ !Shift<Key>f: Connection(Reset) \n\ - None<Key>g: SetValue(Grid, +5) \n\ - !Shift<Key>g: SetValue(Grid, -5) \n\ + None<Key>g: SetValue(Grid, +1) \n\ + !Shift<Key>g: SetValue(Grid, -1) \n\ None<Key>h: ToggleHideName(Object) \n\ !Shift<Key>h: ToggleHideName(SelectedElements) \n\ !Ctrl<Key>h: ChangeHole(ToggleObject) \n\ --- pcb-1.6.3/src/action.c +++ pcb-1.6.3/src/action.c @@ -147,6 +147,7 @@ F_SelectedTexts, F_SelectedVias, F_SelectedRats, + F_SoldermaskFrame, F_Text, F_TextByName, F_TextScale, @@ -252,6 +253,7 @@ { "SelectedRats", F_SelectedRats }, { "SelectedTexts", F_SelectedTexts }, { "SelectedVias", F_SelectedVias }, + { "SoldermaskFrame", F_SoldermaskFrame }, { "Text", F_Text }, { "TextByName", F_TextByName }, { "TextScale", F_TextScale }, @@ -894,6 +896,9 @@ case F_TextScale: SetTextScale(r ? value +Settings.TextScale : value); break; + case F_SoldermaskFrame: + SetSoldermaskFrame(r ? value + PCB->SoldermaskFrame : value); + break; } RestoreCrosshair(True); } --- pcb-1.6.3/src/create.c +++ pcb-1.6.3/src/create.c @@ -115,6 +115,7 @@ /* no pixmap allocated yet */ ptr->SaveUnder = BadAlloc; ptr->ID = ID++; + ptr->SoldermaskFrame=Settings.SoldermaskFrame; return(ptr); } --- pcb-1.6.3/src/dev_gerber.c +++ pcb-1.6.3/src/dev_gerber.c @@ -21,6 +21,7 @@ * Contact addresses for paper mail and Email: * Thomas Nau, Schlehenweg 15, 88471 Baustetten, Germany * Thomas.Nau@rz.uni-ulm.de + * D.J. Barrow dj_barrow@ariasoft.ie added soldermask support. * */ @@ -215,7 +216,7 @@ static void GB_PrintPad(PadTypePtr, int); static void GB_PrintPinOrVia(PinTypePtr, int); static void GB_PrintPadMask(PadTypePtr, int); -static void GB_PrintPinOrViaMask(PinTypePtr, int); +static void GB_PrintPinMask(PinTypePtr, int); static void GB_PrintClearPinOrViaOnGroundplane(PinTypePtr, int); static void GB_PrintMaskOrGroundplaneRectangle(Position, Position, Position, Position, int); @@ -255,7 +256,7 @@ GB_PrintPad, /* print pad */ GB_PrintPinOrVia, /* print pin or via */ GB_PrintPadMask, /* print pad mask */ - GB_PrintPinOrViaMask, /* print pin or via mask */ + GB_PrintPinMask, /* print pin or via mask */ GB_PrintClearPinOrViaOnGroundplane, /* print clear pin or via on groundplane */ GB_PrintMaskOrGroundplaneRectangle, /* print filled rectangle for ground planes and/or @@ -1123,7 +1124,7 @@ /* ---------------------------------------------------------------------- * prints a via or pin mask */ -static void GB_PrintPinOrViaMask(PinTypePtr Pin, int unsued) +static void GB_PrintPinMask(PinTypePtr Pin, int unsued) { /* Add pin/via to the solder mask. */ GB_FPrintPinOrVia(GB_Flags.FP, Pin, unsued); --- pcb-1.6.3/src/dev_ps.c +++ pcb-1.6.3/src/dev_ps.c @@ -80,7 +80,7 @@ static void PS_PrintPinOrVia(PinTypePtr, int); static void PS_PrintClearPinOrViaOnGroundplane(PinTypePtr, int); static void PS_PrintPadMask(PadTypePtr, int); -static void PS_PrintPinOrViaMask(PinTypePtr, int); +static void PS_PrintPinMask(PinTypePtr, int); static void PS_FilledRectangle(Position, Position, Position, Position, int); static void PS_Outline(Position, Position, @@ -132,7 +132,7 @@ PS_PrintPad, PS_PrintPinOrVia, PS_PrintPadMask, - PS_PrintPinOrViaMask, + PS_PrintPinMask, PS_PrintClearPinOrViaOnGroundplane, PS_FilledRectangle, PS_Outline, @@ -164,7 +164,7 @@ PS_PrintPad, PS_PrintPinOrVia, PS_PrintPadMask, - PS_PrintPinOrViaMask, + PS_PrintPinMask, PS_PrintClearPinOrViaOnGroundplane, PS_FilledRectangle, PS_Outline, @@ -920,7 +920,7 @@ { if (TEST_FLAG(SQUAREFLAG, Pad)) { - Dimension scrunch = Pad->Thickness/2 + GROUNDPLANEFRAME; + Dimension scrunch = Pad->Thickness/2 + PCB->SoldermaskFrame; fprintf(PS_Flags.FP, "%d %d %d %d CLRB\n", ((Pad->Point1.X > Pad->Point2.X) ? Pad->Point2.X : Pad->Point1.X) - scrunch, ((Pad->Point1.Y > Pad->Point2.Y) ? Pad->Point2.Y : Pad->Point1.Y) - scrunch, @@ -933,18 +933,18 @@ (int) Pad->Point1.Y, (int) Pad->Point2.X, (int) Pad->Point2.Y, - (int) Pad->Thickness + 2*GROUNDPLANEFRAME); + (int) Pad->Thickness + 2* PCB->SoldermaskFrame); } /* ---------------------------------------------------------------------- * prints a via or pin mask */ -static void PS_PrintPinOrViaMask(PinTypePtr Ptr, int unused) +static void PS_PrintPinMask(PinTypePtr Ptr, int unused) { fprintf(PS_Flags.FP, "%d %d %d %s\n", (int) Ptr->X, (int) Ptr->Y, - (int) Ptr->Thickness + 2*GROUNDPLANEFRAME, + (int) Ptr->Thickness + 2* PCB->SoldermaskFrame, TEST_FLAG(SQUAREFLAG, Ptr) ? "CLRPVSQ" : TEST_FLAG(OCTAGONFLAG, Ptr) ? "CLRPV" : "CLRPVR"); } --- pcb-1.6.3/src/dev_rs274x.c +++ pcb-1.6.3/src/dev_rs274x.c @@ -140,7 +140,7 @@ static void GBX_PrintPad(PadTypePtr, int); static void GBX_PrintPinOrVia(PinTypePtr, int); static void GBX_PrintPadMask(PadTypePtr, int); -static void GBX_PrintPinOrViaMask(PinTypePtr, int); +static void GBX_PrintPinMask(PinTypePtr, int); static void GBX_PrintClearPinOrViaOnGroundplane(PinTypePtr, int); static void GBX_PrintMaskOrGroundplaneRectangle(Position, Position, Position, Position, int); static void GBX_PrintOutline(Position, Position, Position, Position, int); @@ -175,7 +175,7 @@ GBX_PrintPad, /* print pad */ GBX_PrintPinOrVia, /* print pin or via */ GBX_PrintPadMask, /* print pad mask */ - GBX_PrintPinOrViaMask, /* print pin or via mask */ + GBX_PrintPinMask, /* print pin or via mask */ GBX_PrintClearPinOrViaOnGroundplane, /* print clear pin or via on groundplane */ GBX_PrintMaskOrGroundplaneRectangle, /* print filled rectangle for ground planes and/or @@ -382,6 +382,8 @@ /* pads always need clear masks */ findApertureCode(&GBX_Apertures, pad->Thickness + 2*GROUNDPLANEFRAME, TEST_FLAG(SQUAREFLAG, pad) ? SQUARE : ROUND); + findApertureCode(&GBX_Apertures, pad->Thickness + 2*PCB->SoldermaskFrame, + TEST_FLAG(SQUAREFLAG, pad) ? SQUARE : ROUND); ); ELEMENTLINE_LOOP(element, findApertureCode(&GBX_Apertures, line->Thickness, ROUND)); @@ -1171,7 +1173,7 @@ FILE *FP; FP = GBX_Flags.FP; - apCode = findApertureCode(&GBX_Apertures, Pad->Thickness +2*GROUNDPLANEFRAME, + apCode = findApertureCode(&GBX_Apertures, Pad->Thickness +2* PCB->SoldermaskFrame, (Pad->Flags & SQUAREFLAG) ? SQUARE : ROUND); if (lastAperture != apCode) { @@ -1210,11 +1212,11 @@ /* ---------------------------------------------------------------------- * prints a via or pin on the solder mask */ -static void GBX_PrintPinOrViaMask(PinTypePtr Pin, int unused) +static void GBX_PrintPinMask(PinTypePtr Pin, int unused) { int apCode; - apCode = findApertureCode(&GBX_Apertures, Pin->Thickness +2*GROUNDPLANEFRAME, + apCode = findApertureCode(&GBX_Apertures, Pin->Thickness +2* PCB->SoldermaskFrame, TEST_FLAG(SQUAREFLAG, Pin) ? SQUARE : (TEST_FLAG(OCTAGONFLAG, Pin) ? OCTAGON : ROUND)); if (lastAperture != apCode) --- pcb-1.6.3/src/file.c +++ pcb-1.6.3/src/file.c @@ -244,6 +244,9 @@ (int) PCB->MaxWidth, (int) PCB->MaxHeight); fprintf(FP, "Grid(%i %i %i)\n", (int) PCB->Grid, (int) PCB->GridOffsetX, (int) PCB->GridOffsetY); + /* Maintain backwards compatibility with the Soldermask frame if possible */ + if(PCB->SoldermaskFrame!=DEFAULT_SOLDERMASK_FRAME) + fprintf(FP, "SoldermaskFrame(%i)\n",PCB->SoldermaskFrame); fprintf(FP, "Cursor(%i %i %i)\n", (int) Crosshair.X, (int) Crosshair.Y, PCB->Zoom); fprintf(FP, "Flags(0x%08x)\n", (int) PCB->Flags); --- pcb-1.6.3/src/global.h +++ pcb-1.6.3/src/global.h @@ -355,6 +355,7 @@ RouteStyleType RouteStyle[NUM_STYLES]; Pixmap SaveUnder; /* saves data during dialog handling */ DataTypePtr Data; + int SoldermaskFrame; /* Area around pads etc not touched by soldermask */ } PCBType, *PCBTypePtr; typedef struct /* information about the paste buffer */ @@ -516,6 +517,7 @@ /* produced when searching of */ /* connections is done */ XFontStruct *PinoutFont[MAX_ZOOM+1];/* font ID used for pin names */ + int SoldermaskFrame; /* Area around pads etc not touched by soldermask */ } SettingType, *SettingTypePtr; /* ---------------------------------------------------------------------- @@ -577,7 +579,7 @@ void (*Pad)(PadTypePtr, int); void (*PinOrVia)(PinTypePtr, int); void (*PadMask)(PadTypePtr, int); - void (*PinOrViaMask)(PinTypePtr, int); + void (*PinMask)(PinTypePtr, int); void (*ClearPinOrViaOnGroundplane)(PinTypePtr, int); void (*FilledRectangle)(Position, Position, Position, Position, int); void (*Outline)(Position, Position, Position, Position, int); --- pcb-1.6.3/src/insert.c +++ pcb-1.6.3/src/insert.c @@ -42,6 +42,7 @@ #include "select.h" #include "set.h" #include "undo.h" +#include "search.h" /* --------------------------------------------------------------------------- * some local prototypes --- pcb-1.6.3/src/main.c +++ pcb-1.6.3/src/main.c @@ -341,7 +341,10 @@ { "warnColor", XtCColor, XtRPixel, sizeof(Pixel), XtOffsetOf(SettingType, WarnColor), XtRString, XtDefaultForeground }, { "zoom", "Zoom", XtRInt, sizeof(int), - XtOffsetOf(SettingType, Zoom), XtRString, "3" }}; + XtOffsetOf(SettingType, Zoom), XtRString, "3" }, + { "SoldermaskFrame", "SoldermaskFrame", XtRInt, sizeof(int), + XtOffsetOf(SettingType, SoldermaskFrame), XtRString, + "15" } }; /* --------------------------------------------------------------------------- * additional command line arguments --- pcb-1.6.3/src/menu.c +++ pcb-1.6.3/src/menu.c @@ -135,14 +135,15 @@ { "solderSide", "look at solder-side", CB_Action, "SwapSides", NULL }, { "line", NULL, NULL, NULL, NULL }, { "header", "grid setting", NULL, NULL, NULL }, + { "grid01", " 1 mil", CB_Position, "SetValue,Grid,1", NULL }, { "grid05", " 5 mil", CB_Position, "SetValue,Grid,5", NULL }, { "grid10", "10 mil", CB_Position, "SetValue,Grid,10", NULL }, { "grid20", "20 mil", CB_Position, "SetValue,Grid,20", NULL }, { "grid25", "25 mil", CB_Position, "SetValue,Grid,25", NULL }, { "grid50", "50 mil", CB_Position, "SetValue,Grid,50", NULL }, { "grid100", "100 mil", CB_Position, "SetValue,Grid,100", NULL }, - { "gridInc", "increment by 5", CB_Action, "SetValue,Grid,+5", NULL }, - { "gridDec", "decrement by 5", CB_Action, "SetValue,Grid,-5", NULL }, + { "gridInc", "increment by 1", CB_Action, "SetValue,Grid,+1", NULL }, + { "gridDec", "decrement by 1", CB_Action, "SetValue,Grid,-1", NULL }, { "line", NULL, NULL, NULL, NULL }, { "header", "zoom setting", NULL, NULL, NULL }, { "zoom1", "1 : 1 ", CB_Position, "SetValue,Zoom,0", NULL }, @@ -165,7 +166,7 @@ /* ---------------------------------------------------------------------- * Sizes menu button - contains variable contents */ -static PopupEntryType SizesMenuEntries[NUM_STYLES * 2 + 2]; +static PopupEntryType SizesMenuEntries[NUM_STYLES * 2 + 4]; static PopupMenuType SizesMenu = { "sizes", NULL, SizesMenuEntries, CBPOPUP_Sizes, NULL, NULL }; static MenuButtonType SizesMenuButton = @@ -392,8 +393,19 @@ SizesMenuEntries[i].Callback = CB_Action; SizesMenuEntries[i].ClientData = (XtPointer) action[i]; i++; + SizesMenuEntries[i].Name="soldermaskframeInc"; + SizesMenuEntries[i].Label="increment soldermask frame"; + SizesMenuEntries[i].Callback = CB_Action; + SizesMenuEntries[i].ClientData = "SetValue,SoldermaskFrame,+1"; + i++; + SizesMenuEntries[i].Name="soldermaskframeDec"; + SizesMenuEntries[i].Label="decrement soldermask frame"; + SizesMenuEntries[i].Callback = CB_Action; + SizesMenuEntries[i].ClientData = "SetValue,SoldermaskFrame,-1"; + i++; SizesMenuEntries[i].Name = NULL; SizesMenuEntries[i].Label = NULL; + } void UpdateSizesMenu(void) --- pcb-1.6.3/src/parse_l.l +++ pcb-1.6.3/src/parse_l.l @@ -98,6 +98,8 @@ Styles { return(T_STYLES); } Polygon { return(T_POLYGON); } Arc { return(T_ARC); } +SoldermaskFrame { return(T_SOLDERMASKFRAME); } + \'.\' { yylval.number = (unsigned) *(yytext+1); --- pcb-1.6.3/src/parse_y.h +++ pcb-1.6.3/src/parse_y.h @@ -1,32 +0,0 @@ -typedef union /* define YYSTACK type */ -{ - unsigned number; - char *string; -} YYSTYPE; -#define NUMBER 258 -#define CHAR_CONST 259 -#define STRING 260 -#define T_PCB 261 -#define T_LAYER 262 -#define T_VIA 263 -#define T_LINE 264 -#define T_ARC 265 -#define T_RECTANGLE 266 -#define T_TEXT 267 -#define T_ELEMENTLINE 268 -#define T_ELEMENT 269 -#define T_PIN 270 -#define T_PAD 271 -#define T_GRID 272 -#define T_FLAGS 273 -#define T_SYMBOL 274 -#define T_SYMBOLLINE 275 -#define T_CURSOR 276 -#define T_ELEMENTARC 277 -#define T_MARK 278 -#define T_GROUPS 279 -#define T_STYLES 280 -#define T_POLYGON 281 - - -extern YYSTYPE yylval; --- pcb-1.6.3/src/parse_y.y +++ pcb-1.6.3/src/parse_y.y @@ -22,6 +22,7 @@ * Contact addresses for paper mail and Email: * Thomas Nau, Schlehenweg 15, 88471 Baustetten, Germany * Thomas.Nau@rz.uni-ulm.de + * D.J. Barrow dj_barrow@ariasoft.ie added soldermask adjustment support. * */ @@ -66,7 +67,7 @@ %token T_PCB T_LAYER T_VIA T_LINE T_ARC T_RECTANGLE T_TEXT T_ELEMENTLINE %token T_ELEMENT T_PIN T_PAD T_GRID T_FLAGS T_SYMBOL T_SYMBOLLINE T_CURSOR -%token T_ELEMENTARC T_MARK T_GROUPS T_STYLES T_POLYGON +%token T_ELEMENTARC T_MARK T_GROUPS T_STYLES T_POLYGON T_SOLDERMASKFRAME %type <number> symbolid @@ -98,6 +99,7 @@ } pcbname pcbgrid + pcbsoldermaskframe pcbcursor pcbflags pcbgroups @@ -168,7 +170,12 @@ } | ; - +pcbsoldermaskframe : T_SOLDERMASKFRAME '(' NUMBER ')' + { + yyPCB->SoldermaskFrame = $3; + } + | + ; pcbcursor : T_CURSOR '(' NUMBER NUMBER NUMBER ')' { --- pcb-1.6.3/src/print.c +++ pcb-1.6.3/src/print.c @@ -498,8 +498,7 @@ ALLPAD_LOOP(PCB->Data, if ((TEST_FLAG(ONSOLDERFLAG, pad) == 0) == (i == 0)) Device->PadMask(pad, 0);); - ALLPIN_LOOP(PCB->Data, Device->PinOrViaMask(pin, 0);); - VIA_LOOP(PCB->Data, Device->PinOrViaMask(via, 0);); + ALLPIN_LOOP(PCB->Data, Device->PinMask(pin, 0);); } if (GlobalAlignmentFlag) @@ -509,8 +508,7 @@ ALLPAD_LOOP(PCB->Data, if ((TEST_FLAG(ONSOLDERFLAG, pad) == 0) == (i == 0)) Device->PadMask(pad, 1);); - ALLPIN_LOOP(PCB->Data, Device->PinOrViaMask(pin, 1);); - VIA_LOOP(PCB->Data, Device->PinOrViaMask(via, 1);); + ALLPIN_LOOP(PCB->Data, Device->PinMask(pin, 1);); ClosePrintFile(); } --- pcb-1.6.3/src/report.c +++ pcb-1.6.3/src/report.c @@ -215,12 +215,15 @@ sprintf(&report[0],"PAD ID# %d Flags:0x%08x\n" "FirstPoint(X,Y) = (%d, %d) ID = %d\n" "SecondPoint(X,Y) = (%d, %d) ID = %d\n" + "Name = \"%s\"\n" "Width = %d It is owned by SMD element %s\n" "As pin number %s and is on the %s\n" "side of the board.\n", Pad->ID, Pad->Flags, Pad->Point1.X, Pad->Point1.Y, Pad->Point1.ID, Pad->Point2.X, Pad->Point2.Y, - Pad->Point2.ID, Pad->Thickness, + Pad->Point2.ID, + EMPTY(Pad->Name), + Pad->Thickness, EMPTY(element->Name[1].TextString), EMPTY(Pad->Number), TEST_FLAG(ONSOLDERFLAG, Pad) ? "solder (bottom)" : "component"); break; --- pcb-1.6.3/src/set.c +++ pcb-1.6.3/src/set.c @@ -21,6 +21,7 @@ * Contact addresses for paper mail and Email: * Thomas Nau, Schlehenweg 15, 88471 Baustetten, Germany * Thomas.Nau@rz.uni-ulm.de + * D.J. Barrow dj_barrow@ariasoft.ie added adjustable soldermask. * */ @@ -70,7 +71,7 @@ char text[140]; int length; - sprintf(text, "%c %s,%s,%s%s, grid=%i:%i, zoom=%-i:%-i, line=%-i, via=%-i(%-i), text=%i%%, buffer=#%-i, name: ", + sprintf(text, "%c %s,%s,%s%s, grid=%i:%i, zoom=%-i:%-i, line=%-i, via=%-i(%-i), text=%i%%, buffer=#%-i, sold_msk_frame=%i, name: ", PCB->Changed ? '*' : ' ', Settings.ShowSolderSide ? "solder" : "component", TEST_FLAG(ABSOLUTEFLAG, PCB) ? "abs" : "rel", @@ -84,7 +85,8 @@ (int) Settings.LineThickness, (int) Settings.ViaThickness, (int) Settings.ViaDrillingHole, (int) Settings.TextScale, - Settings.BufferNumber+1); + Settings.BufferNumber+1, + (int) PCB->SoldermaskFrame); /* append the name of the layout */ length = sizeof(text) -1 -strlen(text); @@ -152,6 +154,18 @@ SetStatusLine(); } + +void SetSoldermaskFrame(int SoldermaskFrame) +{ + SoldermaskFrame = MAX(MIN_SOLDERMASK_FRAME, SoldermaskFrame); + SoldermaskFrame = MIN(MAX_SOLDERMASK_FRAME, SoldermaskFrame); + if(PCB->SoldermaskFrame!= SoldermaskFrame) + { + PCB->SoldermaskFrame=SoldermaskFrame; + SetStatusLine(); + } +} + /* --------------------------------------------------------------------------- * sets a new line thickness */ --- pcb-1.6.3/src/set.h +++ pcb-1.6.3/src/set.h @@ -37,6 +37,7 @@ void SetStatusLine(void); void SetGrid(int); void SetZoom(int); +void SetSoldermaskFrame(int); void SetLineSize(Dimension); void SetViaSize(Dimension, Boolean); void SetViaDrillingHole(Dimension, Boolean);
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor