diff -u -r -N pcb-1.6.3.orig/README_FILES/CHANGES pcb-1.6.3.new/README_FILES/CHANGES --- pcb-1.6.3.orig/README_FILES/CHANGES Sun May 17 13:32:10 1998 +++ pcb-1.6.3.new/README_FILES/CHANGES Thu Oct 24 22:59:29 2002 @@ -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 diff -u -r -N pcb-1.6.3.orig/README_FILES/DJBARROW_HINTS.TXT pcb-1.6.3.new/README_FILES/DJBARROW_HINTS.TXT --- pcb-1.6.3.orig/README_FILES/DJBARROW_HINTS.TXT Thu Jan 1 01:00:00 1970 +++ pcb-1.6.3.new/README_FILES/DJBARROW_HINTS.TXT Thu Oct 24 22:41:56 2002 @@ -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 + + + + + + + + diff -u -r -N pcb-1.6.3.orig/globalconst.h pcb-1.6.3.new/globalconst.h --- pcb-1.6.3.orig/globalconst.h Wed May 13 12:29:11 1998 +++ pcb-1.6.3.new/globalconst.h Wed Oct 31 01:46:56 2001 @@ -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 */ diff -u -r -N pcb-1.6.3.orig/lib/Imakefile pcb-1.6.3.new/lib/Imakefile --- pcb-1.6.3.orig/lib/Imakefile Sat May 16 23:36:38 1998 +++ pcb-1.6.3.new/lib/Imakefile Thu Oct 24 22:58:24 2002 @@ -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 diff -u -r -N pcb-1.6.3.orig/lib/common.m4 pcb-1.6.3.new/lib/common.m4 --- pcb-1.6.3.orig/lib/common.m4 Sat May 16 23:11:07 1998 +++ pcb-1.6.3.new/lib/common.m4 Thu Oct 24 20:03:12 2002 @@ -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 diff -u -r -N pcb-1.6.3.orig/lib/fpga.list pcb-1.6.3.new/lib/fpga.list --- pcb-1.6.3.orig/lib/fpga.list Thu Jan 1 01:00:00 1970 +++ pcb-1.6.3.new/lib/fpga.list Thu Oct 24 23:06:31 2002 @@ -0,0 +1,2 @@ +XCS40_PQ208:COMPACTQFP:XCS40 +AT512:JEDECQFP2:JEDEC diff -u -r -N pcb-1.6.3.orig/lib/fpga.m4 pcb-1.6.3.new/lib/fpga.m4 --- pcb-1.6.3.orig/lib/fpga.m4 Thu Jan 1 01:00:00 1970 +++ pcb-1.6.3.new/lib/fpga.m4 Thu Oct 24 23:16:11 2002 @@ -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 + + + + + + + + + + diff -u -r -N pcb-1.6.3.orig/lib/genericsmt.inc pcb-1.6.3.new/lib/genericsmt.inc --- pcb-1.6.3.orig/lib/genericsmt.inc Thu Jan 1 01:00:00 1970 +++ pcb-1.6.3.new/lib/genericsmt.inc Thu Oct 24 20:03:20 2002 @@ -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) + +) +') + + diff -u -r -N pcb-1.6.3.orig/lib/genericsmt.list pcb-1.6.3.new/lib/genericsmt.list --- pcb-1.6.3.orig/lib/genericsmt.list Thu Jan 1 01:00:00 1970 +++ pcb-1.6.3.new/lib/genericsmt.list Thu Oct 24 23:06:47 2002 @@ -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 + + + + + diff -u -r -N pcb-1.6.3.orig/lib/genericsmt.m4 pcb-1.6.3.new/lib/genericsmt.m4 --- pcb-1.6.3.orig/lib/genericsmt.m4 Thu Jan 1 01:00:00 1970 +++ pcb-1.6.3.new/lib/genericsmt.m4 Thu Oct 24 23:16:36 2002 @@ -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 + + + + + + + + diff -u -r -N pcb-1.6.3.orig/lib/pci.inc pcb-1.6.3.new/lib/pci.inc --- pcb-1.6.3.orig/lib/pci.inc Thu Jan 1 01:00:00 1970 +++ pcb-1.6.3.new/lib/pci.inc Thu Oct 24 20:27:17 2002 @@ -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)&&(IDX11)&&(IDX1 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')') + +# ------------------------------------------------------------------- + + + + + + + + + diff -u -r -N pcb-1.6.3.orig/src/Pcb.ad.raw pcb-1.6.3.new/src/Pcb.ad.raw --- pcb-1.6.3.orig/src/Pcb.ad.raw Wed May 13 12:29:55 1998 +++ pcb-1.6.3.new/src/Pcb.ad.raw Fri Mar 9 02:20:52 2001 @@ -402,8 +402,8 @@ !Shifte: DeleteRats(SelectedRats) \n\ Nonef: Connection(Find) \n\ !Shiftf: Connection(Reset) \n\ - Noneg: SetValue(Grid, +5) \n\ - !Shiftg: SetValue(Grid, -5) \n\ + Noneg: SetValue(Grid, +1) \n\ + !Shiftg: SetValue(Grid, -1) \n\ Noneh: ToggleHideName(Object) \n\ !Shifth: ToggleHideName(SelectedElements) \n\ !Ctrlh: ChangeHole(ToggleObject) \n\ diff -u -r -N pcb-1.6.3.orig/src/action.c pcb-1.6.3.new/src/action.c --- pcb-1.6.3.orig/src/action.c Wed May 13 12:29:39 1998 +++ pcb-1.6.3.new/src/action.c Tue Aug 28 22:22:13 2001 @@ -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); } diff -u -r -N pcb-1.6.3.orig/src/create.c pcb-1.6.3.new/src/create.c --- pcb-1.6.3.orig/src/create.c Wed May 13 12:29:42 1998 +++ pcb-1.6.3.new/src/create.c Fri Aug 24 01:03:48 2001 @@ -115,6 +115,7 @@ /* no pixmap allocated yet */ ptr->SaveUnder = BadAlloc; ptr->ID = ID++; + ptr->SoldermaskFrame=Settings.SoldermaskFrame; return(ptr); } diff -u -r -N pcb-1.6.3.orig/src/dev_gerber.c pcb-1.6.3.new/src/dev_gerber.c --- pcb-1.6.3.orig/src/dev_gerber.c Thu Oct 24 20:11:18 2002 +++ pcb-1.6.3.new/src/dev_gerber.c Thu Oct 24 20:35:06 2002 @@ -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. * */ @@ -216,7 +217,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); @@ -256,7 +257,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 @@ -1127,7 +1128,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); diff -u -r -N pcb-1.6.3.orig/src/dev_ps.c pcb-1.6.3.new/src/dev_ps.c --- pcb-1.6.3.orig/src/dev_ps.c Wed May 13 12:29:43 1998 +++ pcb-1.6.3.new/src/dev_ps.c Wed Oct 31 01:57:47 2001 @@ -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"); } diff -u -r -N pcb-1.6.3.orig/src/dev_rs274x.c pcb-1.6.3.new/src/dev_rs274x.c --- pcb-1.6.3.orig/src/dev_rs274x.c Thu Oct 24 20:11:18 2002 +++ pcb-1.6.3.new/src/dev_rs274x.c Wed Oct 31 02:05:39 2001 @@ -141,7 +141,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); @@ -176,7 +176,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 @@ -386,6 +386,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)); @@ -1175,7 +1177,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) { @@ -1214,11 +1216,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) diff -u -r -N pcb-1.6.3.orig/src/file.c pcb-1.6.3.new/src/file.c --- pcb-1.6.3.orig/src/file.c Wed May 13 12:29:45 1998 +++ pcb-1.6.3.new/src/file.c Fri Aug 24 01:44:32 2001 @@ -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); diff -u -r -N pcb-1.6.3.orig/src/global.h pcb-1.6.3.new/src/global.h --- pcb-1.6.3.orig/src/global.h Wed May 13 12:29:46 1998 +++ pcb-1.6.3.new/src/global.h Wed Oct 31 02:00:34 2001 @@ -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); diff -u -r -N pcb-1.6.3.orig/src/insert.c pcb-1.6.3.new/src/insert.c --- pcb-1.6.3.orig/src/insert.c Wed May 13 12:29:46 1998 +++ pcb-1.6.3.new/src/insert.c Wed Jun 13 21:55:28 2001 @@ -42,6 +42,7 @@ #include "select.h" #include "set.h" #include "undo.h" +#include "search.h" /* --------------------------------------------------------------------------- * some local prototypes diff -u -r -N pcb-1.6.3.orig/src/main.c pcb-1.6.3.new/src/main.c --- pcb-1.6.3.orig/src/main.c Wed May 13 12:29:47 1998 +++ pcb-1.6.3.new/src/main.c Fri Aug 24 01:21:05 2001 @@ -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 diff -u -r -N pcb-1.6.3.orig/src/menu.c pcb-1.6.3.new/src/menu.c --- pcb-1.6.3.orig/src/menu.c Wed May 13 12:29:48 1998 +++ pcb-1.6.3.new/src/menu.c Tue Aug 28 22:22:35 2001 @@ -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) diff -u -r -N pcb-1.6.3.orig/src/parse_l.l pcb-1.6.3.new/src/parse_l.l --- pcb-1.6.3.orig/src/parse_l.l Wed May 13 12:29:50 1998 +++ pcb-1.6.3.new/src/parse_l.l Fri Aug 24 01:45:02 2001 @@ -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); diff -u -r -N pcb-1.6.3.orig/src/parse_y.h pcb-1.6.3.new/src/parse_y.h --- pcb-1.6.3.orig/src/parse_y.h Sun May 17 13:25:18 1998 +++ pcb-1.6.3.new/src/parse_y.h Thu Jan 1 01:00:00 1970 @@ -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; diff -u -r -N pcb-1.6.3.orig/src/parse_y.y pcb-1.6.3.new/src/parse_y.y --- pcb-1.6.3.orig/src/parse_y.y Wed May 13 12:29:50 1998 +++ pcb-1.6.3.new/src/parse_y.y Thu Oct 24 20:33:47 2002 @@ -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 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 ')' { diff -u -r -N pcb-1.6.3.orig/src/print.c pcb-1.6.3.new/src/print.c --- pcb-1.6.3.orig/src/print.c Wed May 13 12:29:55 1998 +++ pcb-1.6.3.new/src/print.c Wed Oct 31 02:01:46 2001 @@ -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(); } diff -u -r -N pcb-1.6.3.orig/src/report.c pcb-1.6.3.new/src/report.c --- pcb-1.6.3.orig/src/report.c Wed May 13 12:29:57 1998 +++ pcb-1.6.3.new/src/report.c Fri Aug 18 23:05:30 2000 @@ -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; diff -u -r -N pcb-1.6.3.orig/src/set.c pcb-1.6.3.new/src/set.c --- pcb-1.6.3.orig/src/set.c Wed May 13 12:29:58 1998 +++ pcb-1.6.3.new/src/set.c Thu Oct 24 20:31:25 2002 @@ -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); @@ -151,6 +153,18 @@ /* always redraw status line (used for init sequence) */ 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 diff -u -r -N pcb-1.6.3.orig/src/set.h pcb-1.6.3.new/src/set.h --- pcb-1.6.3.orig/src/set.h Wed May 13 12:29:58 1998 +++ pcb-1.6.3.new/src/set.h Fri Aug 24 01:22:24 2001 @@ -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);